【发布时间】:2009-04-25 02:56:25
【问题描述】:
我安装了 JRuby 和 Ruby (MRI)。看来我需要安装两次 gems - 每个平台一次。这是必要的还是我做错了?在我安装了用于 MRI 的 rails gem 之后,我应该将 JRuby 指向它,还是我还需要调用:“jruby -S gem install rails”
【问题讨论】:
标签: ruby installation jruby gem
我安装了 JRuby 和 Ruby (MRI)。看来我需要安装两次 gems - 每个平台一次。这是必要的还是我做错了?在我安装了用于 MRI 的 rails gem 之后,我应该将 JRuby 指向它,还是我还需要调用:“jruby -S gem install rails”
【问题讨论】:
标签: ruby installation jruby gem
您需要为每个不同的 ruby 安装安装 gem。
【讨论】:
如果您设置 GEM_HOME,您可以共享您的 gem 安装。
【讨论】:
一些 gem 针对特定平台,例如Mongrel(有一个 MRI 和一个 JRuby)。此外,JRuby 不能使用具有本机扩展(即 C 代码)的 gem,除非它们使用 FFI(大多数还没有)。
我个人对 MRI 和 JRuby 有单独的 gem 存储库。在尝试追查问题时,一点点额外的麻烦值得高枕无忧。
很容易看到每个 repo 安装了什么:
jruby -S gem list --local
对比
gem list --local
您甚至可以编写一个 ruby 脚本将一个 gem 列表同步到另一个,但您必须小心平台特定的 gem....
【讨论】:
我在创建我的 gem jimmy_jukebox 时遇到了这个问题,但我的 gem 可以同时使用这两个。
首先,JRuby 不处理fork...exec(甚至错误地回复Process.respond_to?(:fork)),所以我不得不rescue NotImplementedError 并改用Spoon.spawnp。
然后我创建了(在我的 gem 的 /bin 目录中)配对的可执行文件 -- play_jukebox 和 jplay_jukebox;和 load_jukebox 和 jload_jukebox - 每个都有正确的 shebang 行(/usr/bin/env ruby 或 /usr/bin/env jruby)。
我很想知道一个更好的方法。但我宁愿在一个 gem 中处理所有事情,而不是维护和分发多个 gem。
【讨论】: