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

Puppet: How to reload enviroment when installing gem package - rbenv version is not active

我有一个 运行ning puppet 服务器,想在 puppet 代理上执行以下步骤:

问题是,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 中启用提供程序无论如何都不会有效。 运行通过 Execgem 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,
  }