1

私は jruby rails アプリを持っていて、gem の依存関係管理にバンドラーを使い始めたところです。展開戦略について人々の意見を聞くことに興味があります。ドキュメントによるとbundle package、宝石をローカルにパッケージ化するので、サーバーでそれらをフェッチする必要はありません (そして、ウグイスはデフォルトでこれを行うと信じています)。コード (この場合は WAR ファイル) ははるかに大きくなります。

私の好みは、コードがサーバーにコピーされた後、すべての依存関係をサーバーに直接フェッチする MVN セットアップを模倣することです。これが私が考えていることです、すべてのコメントは大歓迎です:

Step1: war ファイルをビルドし、サーバーにコピーする
Step2: サーバーで war をアンパックし、mvn で Java の依存関係をフェッチする Step3: Bundler を使用して Gem deps をフェッチする (これらはどこに配置する必要がありますか??)
* Step 3 はステップです。の上。bundle install特定のターゲットを念頭に置いて実行しますか??
ステップ 4: Tomcat を再起動します

繰り返しますが、ここでの私の推論は、展開時に依存関係をコードから分離したいということです。また、アプリ ユーザーのホーム ディレクトリにインストールするのではなく、すべての gem 依存関係をアプリ自体に配置して、含まれるようにしたいと考えています (繰り返しますが、これが Bundler のデフォルトであると考えています)。

4

1 に答える 1

0

Warbler のデフォルトの構造を見るだけで、gem が にコピーされるRails.root/gemsので、その規則に従うことにしました。

*注: このパスを Rails のロード パスとして定義している場所は見当たりませんが、明らかに機能します。これが私の最終的な解決策です:

Step1: Build war file, copy to server
Step2: Unpack war on server, fetch java dependencies with mvn 
Step3: use Bundler to fetch Gem deps: `bundle install gems --without test --disable-shared-gems`
Step4: Restart Tomcat

bundle install gemsまた、特定のコマンドのように見えることにも注意してください。「これらの gem をインストールします」が、gems実際には Rails.root のディレクトリ gems を参照しています。このディレクトリはバンドラーによって作成されるため、デプロイ時に存在する必要はありません。

同様の解決策を探している他の人に役立つことを願っています!

于 2010-05-27T13:59:02.630 に答える