我有一个正在运行的木偶服务器,并希望在木偶代理上执行以下步骤:
/usr/local/rbenv
(成功)/etc/profile.d
中创建文件rbenv.sh,以便在每次登录时都加载rbenv-environment(成功)rbenv install
的exec资源安装特定的ruby版本(成功)rbenv global
的exec-resource激活特定的ruby版本(当前登录失败)问题是,rbenv
从puppet中的exec资源开始在子shell中切换ruby版本,并将该信息存储在某处。当前shell的ruby版本,我的startet puppet agent --test
没有改变。注销并再次注册后,puppet运行成功,因为环境再次成功加载。
所以我的问题是:是否有可能在新的子shell中运行包提供程序?或者我是否必须使用另一个运行gem install
的执行官?
所以我的问题是:是否有可能在新的子shell中运行包提供程序?或者我是否必须使用另一个运行gem install的exec?
不。提供商在主机Ruby实例中运行。他们可能会启动外部命令,包括shell,但它们本身不会以这种方式运行。
而且,你说,
注销并再次注册后,puppet运行成功,因为环境再次成功加载。
如果它真的需要注销并重新启动以使rbenv重新配置处于活动状态(这是不清楚的),那么在子shell中运行提供程序无论如何都不会有效。也不会通过gem install
运行Exec
,除非Exec
也明确激活了所需的Ruby环境。
如果你使用Puppet来交换系统的默认Ruby,那么你需要为不一致的行为做好准备。您可以通过使用适当的Exec
来执行宝石安装来解决它。
我有同样的问题,并为解决方案而搏斗。我希望我的服务器能够从头开始成功配置,因此两次运行配置不会削减它。
我通过在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,
}