我有一个正在运行的人偶服务器,并且想要在人偶代理上执行以下步骤:
/usr/local/rbenv
(成功)/etc/profile.d
中创建文件rbenv.sh,以便在每次登录时加载rbenv-environment ist(成功)rbenv install
(成功)的exec资源安装特定的ruby版本rbenv global
的exec资源激活特定的ruby版本(当前登录失败)问题是,rbenv
从人偶中的exec-resource开始,将红宝石版本切换到子shell中,并将该信息存储在某个地方。当前外壳的红宝石版本(我在其中启动puppet agent --test
的位置未更改)。注销并再次登录后,木偶运行成功,因为环境已成功加载。
所以我的问题是:是否有可能在新的子Shell中运行包提供程序?还是我必须使用另一个运行gem install
的exec?
答案 0 :(得分:0)
所以我的问题是:是否有可能在新的子Shell中运行包提供程序?还是我必须使用另一个执行gem install的exec?
不。提供程序在主机Ruby实例中运行。它们可能会启动外部命令(包括外壳程序),但它们本身不会那样运行。
此外,你说,
注销并再次登录后,木偶运行成功,因为 环境再次成功加载。
如果确实需要注销并重新登录以使rbenv重新配置处于活动状态(尚不清楚),则在子shell中运行提供程序无论如何都不会有效。除非gem install
还明确激活了所需的Ruby环境,否则都不会通过Exec
运行Exec
。
如果您正在使用Puppet从其自身下换出系统的默认Ruby,那么您需要为不一致的行为做好准备。您可以通过使用适当的Exec
来执行gem安装来解决该问题。
答案 1 :(得分:0)
我也遇到了同样的问题,并竭力寻求解决方案。我希望我的服务器从头开始成功配置,所以两次运行配置不会减少它。
我通过在匀场宝石上添加符号链接来解决此问题。木偶在那里寻找宝石供应商。
这对我有用...
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,
}