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

时间:2018-09-19 09:48:16

标签: ruby rubygems version puppet rbenv

我有一个正在运行的人偶服务器,并且想要在人偶代理上执行以下步骤:

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

问题是,rbenv从人偶中的exec-resource开始,将红宝石版本切换到子shell中,并将该信息存储在某个地方。当前外壳的红宝石版本(我在其中启动puppet agent --test的位置未更改)。注销并再次登录后,木偶运行成功,因为环境已成功加载。

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

2 个答案:

答案 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,
  }