Puppet:安装 gem 包时如何重新加载环境 - rbenv 版本未激活
Puppet: How to reload enviroment when installing gem package - rbenv version is not active
我有一个 运行ning puppet 服务器,想在 puppet 代理上执行以下步骤:
- 从 git 服务器下载 rbenv 到
/usr/local/rbenv
(成功)
- 从 git 服务器下载 ruby-构建(成功)
- 在
/etc/profile.d
中创建文件 rbenv.sh,以便在每次登录时加载 rbenv 环境(成功)
- 使用具有
rbenv install
的执行资源安装特定的 ruby 版本(成功)
- 使用具有
rbenv global
的执行资源激活特定的 ruby 版本(当前登录失败)
- 安装特定的 ruby gem(因 ruby 版本依赖性而失败)
问题是,rbenv
从 puppet 中的 exec-resource 开始切换子 shell 中的 ruby 版本,并将该信息存储在某处。当前 shell 的 ruby 版本没有改变,我从 puppet agent --test
开始。注销重新登录后,puppet运行成功,因为环境再次加载成功
所以我的问题是:是否有可能 运行 新子 shell 中的包提供者?或者我必须使用另一个 exec 运行ning gem install
?
So my question is: Is there a possibility to run the package provider in a new subshell? Or do I have to use another exec running gem install?
没有。主机 Ruby 实例中的提供商 运行。他们可能会启动外部命令,包括 shell,但他们自己不是这样 运行。
此外,你说,
After logging out and in again, the puppet run is successful, because
the environment is successfully loaded again.
如果确实需要注销并重新登录以使 rbenv 重新配置处于活动状态(这还不清楚),那么 运行在子 shell 中启用提供程序无论如何都不会有效。 运行通过 Exec
宁 gem install
也不会,除非 Exec
也明确激活了所需的 Ruby 环境。
如果您使用 Puppet 将系统的默认设置 Ruby 从自身下换出,那么您需要为不一致的行为做好准备。您可以通过使用适当的 Exec
来执行 gem 安装来解决这个问题。
我遇到了同样的问题并努力寻找解决方案。我希望我的服务器从头开始成功配置,所以 运行 配置两次不会削减它。
我通过向 shim'ed gem 添加符号链接来修复此问题。 Puppet 在那里寻找 gem 供应商。
这对我有用...
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,
}
我有一个 运行ning puppet 服务器,想在 puppet 代理上执行以下步骤:
- 从 git 服务器下载 rbenv 到
/usr/local/rbenv
(成功) - 从 git 服务器下载 ruby-构建(成功)
- 在
/etc/profile.d
中创建文件 rbenv.sh,以便在每次登录时加载 rbenv 环境(成功) - 使用具有
rbenv install
的执行资源安装特定的 ruby 版本(成功) - 使用具有
rbenv global
的执行资源激活特定的 ruby 版本(当前登录失败) - 安装特定的 ruby gem(因 ruby 版本依赖性而失败)
问题是,rbenv
从 puppet 中的 exec-resource 开始切换子 shell 中的 ruby 版本,并将该信息存储在某处。当前 shell 的 ruby 版本没有改变,我从 puppet agent --test
开始。注销重新登录后,puppet运行成功,因为环境再次加载成功
所以我的问题是:是否有可能 运行 新子 shell 中的包提供者?或者我必须使用另一个 exec 运行ning gem install
?
So my question is: Is there a possibility to run the package provider in a new subshell? Or do I have to use another exec running gem install?
没有。主机 Ruby 实例中的提供商 运行。他们可能会启动外部命令,包括 shell,但他们自己不是这样 运行。
此外,你说,
After logging out and in again, the puppet run is successful, because the environment is successfully loaded again.
如果确实需要注销并重新登录以使 rbenv 重新配置处于活动状态(这还不清楚),那么 运行在子 shell 中启用提供程序无论如何都不会有效。 运行通过 Exec
宁 gem install
也不会,除非 Exec
也明确激活了所需的 Ruby 环境。
如果您使用 Puppet 将系统的默认设置 Ruby 从自身下换出,那么您需要为不一致的行为做好准备。您可以通过使用适当的 Exec
来执行 gem 安装来解决这个问题。
我遇到了同样的问题并努力寻找解决方案。我希望我的服务器从头开始成功配置,所以 运行 配置两次不会削减它。
我通过向 shim'ed gem 添加符号链接来修复此问题。 Puppet 在那里寻找 gem 供应商。
这对我有用...
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,
}