我正在尝试使用需要 ruby gem 的 puppet 提供程序。
它正在 Debian 稳定版(wheezy)上运行,但我收到以下错误:
err: Could not run Puppet configuration client: no such file to load -- zabbixapi
问题似乎是 puppet 特别需要 ruby1.8。但是,安装的 rubygems 版本是 ruby1.9.1。因此,所有安装的 gem 都位于 中/var/lib/gems/1.9.1/gems/
,大概是 ruby 1.8 版本没有出现在其中。
让 puppet 代码能够需要 gem 的最简洁方法是什么?我并不真正在意最终使用哪个版本的 ruby,只要 rubygems 和 puppet 之间一致即可。
答案1
解决此问题的一个方法是将所需 gem 的路径硬编码到 ruby 的加载路径中。
file { '/etc/profile.d/rubylib.sh':
content => 'export RUBYLIB=\'/var/lib/gems/1.9.1/gems/zabbixapi-2.4.0/lib\''
}
这很糟糕,原因如下:
- 硬编码版本号
- 需要多次运行 puppet
- 需要在 Puppet 运行之间注销并重新登录
- 在错误的抽象层解决问题
不过我还没找到更好的解决方法,所以暂时就这样了。