0

nginx の背後にあるシン 1.2.11 でアプリケーションを実行しています。開発マシンで使用bundle updateし、git にコミットしてからcap deploy. ただし、薄いと次のエラーが発生します。

/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.14/lib/bundler/runtime.rb:31:in `block in setup': You have already activated rack 1.3.0, but your Gemfile requires rack 1.2.3. Consider using bundle exec. (Gem::LoadError)

サーバーには、システム全体に次の宝石がインストールされています。

bundler (1.0.14)
daemons (1.1.3)
eventmachine (0.12.10)
rack (1.3.0)
rake (0.9.2)
thin (1.2.11)

私のアプリケーションのGemfile:

source 'http://rubygems.org'

gem 'rails', '3.0.7'
gem 'sqlite3'
gem 'capistrano'
gem 'thin'
gem 'RedCloth'
gem 'will_paginate', '3.0.pre2'
gem 'jquery-rails'

シンにはラック 1.3 が必要ですが、Gemfile にはラック 1.2.3 が必要です。ジェムの管理方法が間違っていませんか? デプロイと適切な gem コントロールを管理する適切な方法は何ですか?

の使用が機能することがわかりましbundle exec thin startたが、使用できるようにするソリューションを好みます/etc/init.d/thin start

4

2 に答える 2

3

好みを伝える前に、 http: //yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/をお読みください。

問題は、システムにインストールされた gem からコマンドを実行して、Gemfile で指定された独自の依存関係 (つまり、ラック) を持つアプリケーションを実行することです。同じライブラリの 2 つのバージョンを同時にロードすることはできないため、すべてのコマンドで「bundle exec」が必要になるという問題が発生しています。

于 2011-06-06T08:56:19.393 に答える
-1

キャップスクリプトの開始時に実行するだけbundle execで、彼はバンドラーから宝石をピックアップします。

システム/現在使用しているgemsetにいくつかのgemの新しいバージョンがある場合、同じ問題が発生することがよくあります。

beシェルで呼び出されるエイリアスもありbundle execます。新しいバージョンのrvmは、execを自動的にバンドルします:)。

于 2011-08-23T12:17:12.080 に答える