2012-01-17 6 views
3

Apache2とPassenger(v3.0.9)を使用して複数のアプリケーションを展開します。 App FooはRails 3.0.11アプリで、App BarはRails 3.1.3アプリです。どちらのアプリも、バンドラを使用して依存関係を管理しています。 PassengerとBundlerは、Passengerのドキュメントを理解した上で、各アプリケーションに必要な依存関係をロードするように機能します。 FooはRack 1.2.4に依存し、BarはRack 1.3.5に依存します。Apache2とPassengerを使用してラックの宝石をシャドウします

Barが導入され、バンドルインストールが実行されると(Capistrano経由で)、Rack 1.3.5がインストールされます。そして突然、Fooのは、次の旅客のエラーを取得:

Gem::LoadError - You have already activated rack 1.3.5, but your Gemfile requires rack 1.2.4. Using bundle exec may solve this. 

メッセージが役に立つことしようとしているが、私は、バンドルのexecを実行する必要があります正確にどこか分かりません。私はまた、他の場所で推奨されているようにバンドルinstall --path vendor/cacheを実行しようとしましたが、それは役に立たないようです。

私はRack 1.3.5をアンインストールできますが、Barの危険にさらされます。もう一つの解決策は、FooをRails 3.1.xにアップグレードすることですが、ここで何がうまくいかないのか理解したいと思います。これは、今後異なるバージョンのアプリケーションを実行する可能性が高いからです。

+0

config.ruファイルを削除しただけで、アプリがRackアプリではないと思われます。誰もがその解決策についてコメントしていますか? –

+0

私は同じ問題を抱えていますが、この時間の後にはより良い解決策がありますか? –

+0

Kanzeon、私は数ヶ月間この問題を抱えていた組織に関与していません。私たちはconfig.ruファイルを削除するだけで済み、すべて動作するように見えました。私は数日前にMartin Mがソリューションを投稿したのを見ています。私はこれを確認するのに便利な状況ではないので、あなたのために働く場合、彼の解決策をupvoteしてください。 –

答えて

0

私は同様の状況にあります:同じサーバー上の同じドメインの下に、1つのRails 3.0.11アプリとRails 3.2.8アプリがあります。

展開にはCapistranoを使用します。私が持っているのconfig/deploy.rbで

: "キャップデプロイ" 中

require 'bundler/capistrano' 

、バンドラのレシピが実行されます。

cd {app_path}/releases/{release} && bundle install --gemfile {app_path}/releases/{release}/Gemfile --path {app_path}/shared/bundle --deployment --quiet --without development test

この(--pathと--deployment)が管理して一方のレールで非常に

{app_path}/shared/bundle/ruby/{ruby_version}/gems

でアプリごとの宝石リポジトリ3.0.11のApp私は3.2.8 APPにおけるラック1.2.4とRails-3.0.11しばらく持っていますラック1.4.1およびレール3.2.8。 両方のジェムセットがきれいに分かれています。

おそらく、これらのgemsetリポジトリをクリーンアップすることができます。

関連する問題