ruby - 从 Ruby 2.0 脚本调用 Ruby 1.8 脚本

标签 ruby gem rvm ruby-2.0 ruby-1.8

我不确定这属于这里还是其他地方( super 用户?)但无论如何:

我有两个 Ruby 脚本,一个需要 Ruby 2.0 (A),另一个需要 1.8 (B)。 A 需要用 fork 进程调用 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:

> 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]

对我能做什么有什么想法吗?我不太了解 gems,但 B 似乎试图查看安装在 Ruby 2.0 下的 gems,而不是 1.8。 (是的,我已经在 1.8 下运行了 gem install json。)显然脚本比这里出现的更复杂,绝对不能移植或组合(这并不意味着我不 < em>想要,这意味着我不能用于我的用例),否则我会。

最佳答案

您需要将 shebang 更改为:

#!/Users/user_name/.rvm/wrappers/ruby-1.8.7-p374/ruby

它不仅会使用那颗 ruby ,还会使用它的 gem 。

如果您使用 bundler (Gemfile),您可能还需要将命令调用包装在:

Bundler.with_clean_env do
  ...
end

这将重置加载的 bundler 环境

关于ruby - 从 Ruby 2.0 脚本调用 Ruby 1.8 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20082299/

相关文章:

ruby - 正则表达式在电子邮件的原始正文中查找 Base64 (Ruby)

ruby - 字符串值作为散列键,创建副本

css - Nanoc 没有编译 css

ruby-on-rails-3 - Rails 3.1 内置记录器 vs Log4r

ruby - 在设置 RVM 环境以使用 Gist 和 OpenSSL 时遇到问题

ruby - shell 脚本中的 cd 命令是否将 rvmrc 加载到目标目录中?

ruby - 如何避免 ruby​​ block 中的重复代码?

ruby-on-rails - 带有 Prawn Gem 的复选框

ruby-on-rails - 将 ruby​​ 中的日期转换为自定义格式

ruby-on-rails - 安装了 RVM,rvm 命令不起作用