我需要在多个站点安装ruby,但是各个站点之间安装的确切位置可能略有不同。
我使用-enable-load-relative
进行配置和编译。这似乎适用于我的linux安装,但不适用于aix。当我为linux配置时,我使用了
--enable-load-relative --prefix=blah --exec-prefix=blah/linux_code_rel
我能够通过执行以下操作来测试相对负载: 首先使用名为linux_code_rel的安装目录
blah/linux_code_rel/bin/ruby -e " puts 'hello' "
然后将目录重命名为linux_code后,运行
blah/linux_code/bin/ruby -e " puts 'hello' "
我两次回来hello
当我为aix做同样的事情时,它似乎不起作用。 我使用
配置和安装 --enable-load-relative --prefix=blah --exec-prefix=blah/aix_code_rel
如果我运行,安装后
blah/aix_code_rel/bin/ruby -e "puts 'hello' "
我回来了
hello
如果我将aix_code_rel重命名为aix_code并运行
blah/aix_code/bin/ruby -e "puts 'hello' "
我得到了
<internal:gem_prelude>:1:in `require': cannot load such file -- rubygems.rb (LoadError)
from <internal:gem_prelude>:1:in `<compiled>'
使用ln -s aix_code aix_code_rel
创建符号链接,似乎解决了这个问题,这表明安装总是在寻找使用路径blah / aix_code_rel找到的代码,尽管我配置了{{1 }}
我似乎能够通过设置RUBYLIB env变量来解决这个问题,但这看起来很混乱,特别是考虑到linux安装似乎与相对加载有关。
任何人都知道我可能做错了什么?还有其他原因我可以设置默认的LOAD_PATH吗?也许有些安装后的配置文件?
答案 0 :(得分:0)
我没有尝试过这个选项,但是在AIX上这将是一些让它起作用的技巧。
如果找到可执行文件或共享库(如miniruby或libruby.so.xxxxx)并执行:
dump -H miniruby
您将看到显示其所依赖的输出。在“导入文件字符串”下方,您将看到一个列表。第0个条目是特定可执行文件或共享库用于其“libpath”的条目。你可以制作那些相对路径。它确实有效。但这引入了一个安全风险(我最近才被告知)Ruby构建过程试图避免。
如果未在环境中设置 LIBPATH,则为。如果在环境中设置了LIBPATH,那么它将在所有情况下使用该路径。
哦......实际上有一个例外。 (我正在编辑,因为我正在键入)导入文件字符串列表中的第1到第n个条目可以是绝对路径,在这种情况下,即使LIBPATH也不会改变搜索,因为没有搜索完成。
可能有用的是在脚本中包装“ruby”,该脚本使用相同的参数设置LIBPATH然后执行exec的ruby。类似的东西:
#!/bin/sh
export LIBPATH=/blah:/ble/blah:/usr/lib:/lib
exec real-ruby "$@"
你必须做或担心的小舞蹈是如果红宝石看着argv [0]并根据它的名字做不同的事情。我不这么认为。另一部分是您可能需要设置GEM_HOME和其他一些ruby环境变量。
另一个真实的世界建议是创建一个符号链接,从而将其安装到安装它的位置。对bin和lib目录执行此操作,这可能也有效。