Puppet:如何在安装gem包时重新加载环境 - rbenv版本未激活

问题描述 投票:0回答:2

我有一个正在运行的木偶服务器,并希望在木偶代理上执行以下步骤:

  • 从git服务器下载rbenv到/usr/local/rbenv(成功)
  • 从git服务器下载ruby-build(成功)
  • /etc/profile.d中创建文件rbenv.sh,以便在每次登录时都加载rbenv-environment(成功)
  • 使用带有rbenv install的exec资源安装特定的ruby版本(成功)
  • 使用带有rbenv global的exec-resource激活特定的ruby版本(当前登录失败)
  • 安装特定的ruby gem(由于ruby版本依赖而失败)

问题是,rbenv从puppet中的exec资源开始在子shell中切换ruby版本,并将该信息存储在某处。当前shell的ruby版本,我的startet puppet agent --test没有改变。注销并再次注册后,puppet运行成功,因为环境再次成功加载。

所以我的问题是:是否有可能在新的子shell中运行包提供程序?或者我是否必须使用另一个运行gem install的执行官?

ruby rubygems version puppet rbenv
2个回答
0
投票

所以我的问题是:是否有可能在新的子shell中运行包提供程序?或者我是否必须使用另一个运行gem install的exec?

不。提供商在主机Ruby实例中运行。他们可能会启动外部命令,包括shell,但它们本身不会以这种方式运行。

而且,你说,

注销并再次注册后,puppet运行成功,因为环境再次成功加载。

如果它真的需要注销并重新启动以使rbenv重新配置处于活动状态(这是不清楚的),那么在子shell中运行提供程序无论如何都不会有效。也不会通过gem install运行Exec,除非Exec也明确激活了所需的Ruby环境。

如果你使用Puppet来交换系统的默认Ruby,那么你需要为不一致的行为做好准备。您可以通过使用适当的Exec来执行宝石安装来解决它。


0
投票

我有同样的问题,并为解决方案而搏斗。我希望我的服务器能够从头开始成功配置,因此两次运行配置不会削减它。

我通过在shim'ed gem中添加符号链接来解决这个问题。 Puppet在那里寻找宝石供应商。

这对我有用......

  include rbenv

  rbenv::plugin {'rbenv/ruby-build':}
  -> rbenv::build { '2.5.3':
    global => true,
  }
  -> file { '/usr/bin/gem':
    ensure => link,
    target => '/usr/local/rbenv/shims/gem',
  }
  -> package {'passenger':
    ensure   => '6.0.1',
    provider => gem,
  }
© www.soinside.com 2019 - 2024. All rights reserved.