3

Gemfileのパスオプションをサポートしていないwarblerの推奨される回避策はありますか?パスがサポートされていない(そして私はそれを実装できなかった)根本的な理由はありますか?

4

2 に答える 2

2

パスオプションは移植性がありません。Bundlerは、そのパスでコードを見つけることができることを期待しています。これは、自己完結型のwarファイルの目的を損なうものです。

回避策は、パスベースのgemのディレクトリで「gitinit; git commit -a」を実行し、代わりにgitベースのgemのように扱うことです。次に、Bundlerはコードのコピーをチェックアウトでき、Warblerはそのコピーをwarファイルに保存できます。

于 2012-04-02T12:48:05.610 に答える
0

私は(残念ながら)これのコードを投稿することはできませんが(まだ...)、次のことを正常に実行しました。

  1. ウグイスをハックして(基本的にバンドラーのgemパッケージコード全体を置き換えます)、で指定されたgemをにコピーします:pathvendor/gems通常のgemの場所はですgems/gems)。このコピーは、warblerが:git仕様から宝石をコピーする方法とほぼ同じように行われました。

  2. モンキーパッチバンドラーなので、スペックをロードするGemfile:path、を指すように書き直されvendor/gemsます。

それはきれいではありませんが、私はこの解決策に非常に満足しています。


私が見たもう1つのオプションは、Gemfilevendor/gemsで使用するすべてのgemへのシンボリックリンクを含むディレクトリを作成することです。:pathWarblerはgemをサポートしていないと文句を言い:pathますが、それらはシンボリックリンクを介してWARファイルにコピーされます。Gemfileとシンボリックリンクでを維持する必要があるため、このソリューションは好きではありませんが:path、上記よりも実装が簡単です。


また、Nick Siger:pathは、(上記のハックなしで)そのままサポートすると、自己完結型のWARファイルの目的が損なわれることに同意しますが、自己完結型のWARファイルが常に望ましいとは限りません。もちろん、自己完結型ではないWARファイルにはトレードオフがありますが、1つの利点は、サイズが小さく、コピー、解凍などが高速であることです。もちろん、これをサポートするには、JRuby-RackとWarblerを変更する必要があります。

于 2012-07-18T16:11:48.407 に答える