Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可能--启用“相对负载”;不适合ruby安装?_Ruby_Aix - Fatal编程技术网

为什么可能--启用“相对负载”;不适合ruby安装?

为什么可能--启用“相对负载”;不适合ruby安装?,ruby,aix,Ruby,Aix,我需要在几个站点安装ruby,但是不同站点之间安装的确切位置可能略有不同 我使用-enable load relative进行了配置和编译。这似乎适用于我的linux安装,但不适用于aix。当我为linux配置时,我使用了 --enable-load-relative --prefix=blah --exec-prefix=blah/linux_code_rel 我能够通过执行以下操作来测试相对负载: 首先使用名为linux\u code\u rel的安装目录 blah/linux_code_

我需要在几个站点安装ruby,但是不同站点之间安装的确切位置可能略有不同

我使用
-enable load relative
进行了配置和编译。这似乎适用于我的linux安装,但不适用于aix。当我为linux配置时,我使用了

--enable-load-relative --prefix=blah --exec-prefix=blah/linux_code_rel
我能够通过执行以下操作来测试相对负载: 首先使用名为linux\u code\u rel的安装目录

blah/linux_code_rel/bin/ruby -e " puts 'hello' "
然后在将目录重命名为linux_代码后,运行

blah/linux_code/bin/ruby -e " puts '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' "
我明白了

:1:在'require'中:无法加载这样的文件--rubygems.rb(LoadError)
from:1:in`'
使用
ln-s aix_-code aix_-code_-rel
创建一个符号链接似乎可以解决这个问题,这表明安装程序总是在使用路径blah/aix_-code_-rel查找代码,尽管我配置了
--enable load relative

我似乎可以通过设置RUBYLIB env变量来克服这一问题,但这似乎很麻烦,特别是考虑到linux安装似乎可以使用相对加载


有人知道我可能做错了什么吗?是否有其他原因可以设置默认加载路径?可能是一些安装后配置文件?

我还没有尝试过这个选项,但在AIX上,这将是让它工作的一些技巧

如果找到可执行文件或共享库(如miniruby或libruby.so.xxxxx),请执行以下操作:

您将看到显示它所依赖的内容的输出。在“导入文件字符串”下面,您将看到一个列表。第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 "$@"
如果ruby看着argv[0]并根据它的名字做不同的事情,那么你必须做或担心的一件小事。我想没有。另一部分是您可能需要设置GEM_HOME和其他一些ruby环境变量


另一个现实世界是创建一个符号链接,从它的安装位置到它的安装位置。对bin和lib目录执行此操作,可能也会起作用。

谢谢,包装方案是我的备份计划。使用-x命令行参数使这一点不那么糟糕,因为您可以设置环境,然后调用ruby并传入相同的文件名,它将跳过所有这些内容,并在看到#ruby后开始运行。
dump -H miniruby
#!/bin/sh
export LIBPATH=/blah:/ble/blah:/usr/lib:/lib
exec real-ruby "$@"