JRubyとRuby(MRI)をインストールしています。これらのプラットフォームごとに1回ずつ、gemを2回インストールする必要があるようです。これは必要ですか、それとも間違っていますか?MRI用のrailsgemをインストールした後、JRubyをポイントする必要がありましたか、それとも「jruby -Sgeminstallrails」と呼ぶ必要がありましたか。
4 に答える
所有している ruby のインストールごとに gem をインストールする必要があります。
GEM_HOMEを設定すると、gemのインストールを共有できます。
一部の gem は特定のプラットフォームをターゲットにしています (Mongrel など) (MRI と JRuby があります)。また、JRuby は、FFI を使用しない限り、ネイティブ拡張機能 (つまり C コード) を持つ gem を使用できません (ほとんどの場合、まだ使用されていません)。
個人的には、MRI と JRuby 用に別々の gem リポジトリを持っています。問題を突き止めようとするときは、少し手間がかかるだけで安心できます。
各レポがインストールしたものを確認するのは非常に簡単です。
jruby -S gem list --local
対。
gem list --local
1 つの gem リストを別の gem リストに同期する Ruby スクリプトを作成することもできますが、プラットフォーム固有の gem には注意する必要があります。
宝石jimmy_jukeboxを作成するときにこの問題に遭遇しましたが、私の宝石は両方で動作しました。
まず、JRuby は処理しないfork...exec
(さらには に間違って応答するProcess.respond_to?(:fork)
) ため、代わりにrescue NotImplementedError
使用する必要がありました。Spoon.spawnp
次に、(私の宝石の /bin ディレクトリに) ペアの実行可能ファイルを作成しました --play_jukebox
とjplay_jukebox
; and load_jukebox
and jload_jukebox
-- それぞれ正しいシバン行 (/usr/bin/env ruby
または/usr/bin/env jruby
)。
もっと良い方法を知りたいです。しかし、私は、複数の gem を維持して配布するよりも、1 つの gem 内ですべてを処理したいと考えています。