我不确定这是属于这里还是其他地方(超级用户?)但无论如何:
我有两个Ruby脚本,一个需要Ruby 2.0(A),另一个需要1.8(B).需要使用分叉进程调用B. A是这样的:
require "fileutils"
require "json"
...
`name_of_B`
B是一个带有shebang的可执行脚本,从这样开始:
#!/Users/user_name/.rvm/rubies/ruby-1.8.7-p374/bin/ruby
require 'rubygems'
require 'json'
...
我使用RVM来管理我的Ruby版本:
> rvm list
rvm rubies
ruby-1.8.7-p374 [ i686 ]
ruby-1.9.3-p448 [ x86_64 ]
=* ruby-2.0.0-p247 [ x86_64 ]
我用A运行A:
> ruby name_of_A
但最终得到:
/Users/jacobevelyn/.rvm/gems/ruby-2.0.0-p247/gems/json-1.8.1/lib/json/ext/parser.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2013-06-27 patchlevel 374) [i686-darwin12.5.0]
关于我能做什么的任何想法?我不太了解宝石,但似乎B试图看看安装在Ruby 2.0下的宝石,而不是1.8. (是的,我已经在1.8下运行了gem install json.)显然脚本比它们在这里出现的更复杂,绝对不能移植或组合(这并不意味着我不想,这意味着我可以’为我的用例),否则我会.
最佳答案 你需要将shebang改为:
#!/Users/user_name/.rvm/wrappers/ruby-1.8.7-p374/ruby
它不仅会使用ruby,还会使用它的宝石.
如果您使用bundler(Gemfile),您可能还需要将命令调用包装在:
Bundler.with_clean_env do
...
end
这将重置加载的bundler环境