5

バンドラーの使用を開始しましたが、動作に問題があります。次のgemfileがあります:

source "http://rubygems.org"
gem "rack", "~>1.1"
gem 'pg','>= 0.8.0'
gem 'rails','2.3.8'
gem 'authlogic','2.1.3'
gem 'ajaxful_rating','2.2.3'
gem 'will_paginate','2.3.12'
gem 'right_aws','1.10.0'
gem 'aws-s3','0.6.2'
gem 'declarative_authorization','0.4.1'
gem 'timeline_fu','0.3.0'
gem 'friendly_id','>= 3.1'

ラック 1.1 (1.1.0) を使用することを明確にしていることに注意してください。

Thin で実行すると、次のエラーが発生します (Webrick は正常に動作します)。

thin start
>> Using rails adapter
/usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/runtime.rb:27:in `setup': You have already activated rack 1.2.1, but your Gemfile requires rack 1.1.0. Consider using bundle exec. (Gem::LoadError)
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/spec_set.rb:12:in `each'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/spec_set.rb:12:in `each'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler/runtime.rb:17:in `setup'
 from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.3/lib/bundler.rb:100:in `setup'
 from /home/vmplanet/Documents/maga/config/../config/preinitializer.rb:16
 from /home/vmplanet/Documents/maga/config/boot.rb:28:in `load'
 from /home/vmplanet/Documents/maga/config/boot.rb:28:in `preinitialize'
 from /home/vmplanet/Documents/maga/config/boot.rb:10:in `boot!'
 from /home/vmplanet/Documents/maga/config/boot.rb:126
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from /home/vmplanet/Documents/maga/config/environment.rb:7
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
 from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/rails.rb:42:in `load_application'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/rails.rb:23:in `initialize'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/loader.rb:48:in `new'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/rack/adapter/loader.rb:48:in `for'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:163:in `load_adapter'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:67:in `start'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `send'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command'
 from /home/vmplanet/.gem/ruby/1.8/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'

したがって、基本的には、私がラック 1.2.1 を使用していると不平を言っています (そうではなく、それを使用するものは何も考えられません)。

何かご意見は?

4

4 に答える 4

6

Thin 自体はRackに依存します。また、Thin はアプリケーションをロードする前に自身をロードするため、バンドラーが最初に画像に入った時点で、Rack の最新バージョンが既にロードされています。

Rack の正しいバージョンを Thin に強制する必要があります。理論的には、システム gem に Rack 1.1.0 しか入れることができませんでしたが、これでは保守や移植が困難です。エラー メッセージには既に回答が含まれています。使用してbundle execください。

bundle exec thin start
于 2010-10-24T00:50:01.547 に答える
2

したがって、基本的には、私がラック 1.2.1 を使用していると不平を言っています (そうではなく、それを使用するものは何も考えられません)。

私も同じことを考えていましたが、その通りです。Rubygems は最新バージョンを使用しています。Bundler を使用すると、このデフォルトをオーバーライドできます。

bundle exec foo

システムに gem をインストールすると、Rubygems は、gem が使用可能にするすべての実行可能ファイルのラッパーを作成します。bundle exec を使用せずにコマンド ラインから実行可能ファイルを実行すると、このラッパーが Rubygems を呼び出し、通常の Rubygems アクティベーション メカニズムを使用して gem の実行可能ファイルを呼び出します。これは過去数か月で変更されましたが、Gemfile.lock で別のバージョンが指定されていても、Rubygems はシステムにインストールされている最新バージョンの gem を呼び出します。さらに、Gemfile.lock で別のバージョンが指定されている場合でも、その gem の依存関係の最新の (互換性のある) インストール済みバージョンを有効にします。ソース

于 2014-06-04T18:36:27.663 に答える
0

この役立つブログ投稿も参照してください。

于 2012-04-24T12:59:01.040 に答える
0

Thin の使用に関する情報は、heroku のサイトにあります。また、薄い使用をお勧めします。 http://devcenter.heroku.com/articles/rails3#webserver

于 2011-07-11T22:13:12.293 に答える