有没有办法自动附加到 ruby 中的 $: 变量来解释额外的 site_ruby 位置?
Ruby 安装在 /usr/local/ 中,使用 gem_install 将正确地将新的 ruby 文件安装到 /usr/local/lib/ruby/site_ruby 中。
但是,有一些用于 ruby 绑定到 shadow 等工具的 RPM,我们想安装它们,它们安装到 /usr/lib/ruby/site_ruby(非本地)。有没有标准方法告诉 ruby 默认情况下也应包含此目录?
我知道脚本可以动态更新 $: 或者可以用 -I 调用它们,但这似乎是应该在安装中处理的事情。
还有其他人找到解决此类问题的干净方法吗?
谢谢,查克
答案1
在 /etc/profile 中设置 RUBYLIB 以包含您想要的路径。
一些不可靠的示例代码:
#!/usr/bin/ruby -w
path_array = ARGV.dup
$:.each {|path| path_array << path }
path_string = "RUBYLIB=#{path_array.join(":")}"
begin
File.open("/etc/profile", "a") {|f| f.puts(path_string)}
rescue => e
puts "error writing file: #{e}"
exit 1
end
你可以将此脚本别名添加到你的路径中,然后调用
$ add_ruby_path "<path1>" "<path2>" "<path3>"
但它本身并不是非常自动化...
也许您可以创建一个名为 /etc/rubypaths 的文件,并让脚本从 cron 运行,只需稍加修改?因此,您不必依赖 ARGV,而是执行以下操作:
path_array = []
path_array = IO.read("/etc/rubypaths").split("\n")
...
但也许你想要的是让操作系统以某种方式“知道”文件系统上还有另一个 site_ruby 文件夹,和您希望将其添加到 $RUBYLIB。不确定这是否可以做到,除非您通过 /etc 中的文件等实际告知操作系统您的意图。