Gemfileのパスオプションをサポートしていないwarblerの推奨される回避策はありますか?パスがサポートされていない(そして私はそれを実装できなかった)根本的な理由はありますか?
2 に答える
パスオプションは移植性がありません。Bundlerは、そのパスでコードを見つけることができることを期待しています。これは、自己完結型のwarファイルの目的を損なうものです。
回避策は、パスベースのgemのディレクトリで「gitinit; git commit -a」を実行し、代わりにgitベースのgemのように扱うことです。次に、Bundlerはコードのコピーをチェックアウトでき、Warblerはそのコピーをwarファイルに保存できます。
私は(残念ながら)これのコードを投稿することはできませんが(まだ...)、次のことを正常に実行しました。
ウグイスをハックして(基本的にバンドラーのgemパッケージコード全体を置き換えます)、で指定されたgemをにコピーします
:path
(vendor/gems
通常のgemの場所はですgems/gems
)。このコピーは、warblerが:git
仕様から宝石をコピーする方法とほぼ同じように行われました。モンキーパッチバンドラーなので、スペックをロードする
Gemfile
と:path
、を指すように書き直されvendor/gems
ます。
それはきれいではありませんが、私はこの解決策に非常に満足しています。
私が見たもう1つのオプションは、Gemfilevendor/gems
で使用するすべてのgemへのシンボリックリンクを含むディレクトリを作成することです。:path
Warblerはgemをサポートしていないと文句を言い:path
ますが、それらはシンボリックリンクを介してWARファイルにコピーされます。Gemfileとシンボリックリンクでを維持する必要があるため、このソリューションは好きではありませんが:path
、上記よりも実装が簡単です。
また、Nick Siger:path
は、(上記のハックなしで)そのままサポートすると、自己完結型のWARファイルの目的が損なわれることに同意しますが、自己完結型のWARファイルが常に望ましいとは限りません。もちろん、自己完結型ではないWARファイルにはトレードオフがありますが、1つの利点は、サイズが小さく、コピー、解凍などが高速であることです。もちろん、これをサポートするには、JRuby-RackとWarblerを変更する必要があります。