我安装了 JRuby 和 Ruby (MRI)。看来我需要安装两次 gems - 每个平台一次。这是必要的还是我做错了?在我为 MRI 安装 rails gem 之后,我应该将 JRuby 指向它,还是我也需要调用:“jruby -S gem install rails”
4 回答
您需要为您拥有的每个不同的 ruby 安装安装 gems。
如果您设置 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。