如何最好地自动处理多个 site_ruby 位置?

如何最好地自动处理多个 site_ruby 位置?

有没有办法自动附加到 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 中的文件等实际告知操作系统您的意图。

相关内容