Rails - 使用thin时的bundler错误

时间:2010-10-23 23:27:30

标签: ruby-on-rails bundler thin

我开始使用bundler并且在使用它时遇到一些问题。我有以下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'

请注意,我特别想要使用rack 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 个答案:

答案 0 :(得分:6)

在Rack上自我填充depends。并且因为Thin会在加载应用程序之前加载自身,所以当捆绑器首次进入图片时,最新版本的Rack将被加载。

您必须强制使用正确版本的Rack to Thin。从理论上讲,你的系统宝石只能使用Rack 1.1.0,但这很难维护或移植。错误消息已包含答案;使用bundle exec

bundle exec thin start

答案 1 :(得分:2)

  

所以基本上它抱怨我使用机架1.2.1(这是   不是这样,我无法想到任何使用它的东西。)

我认为同样的事情,但情况确实如此。 Rubygems正在使用最新版本。 Bundler允许您使用

覆盖此默认值
bundle exec foo
  

当您向系统安装gem时,Rubygems会为其创建包装器   gem提供的每个可执行文件。当你运行一个   来自命令行的可执行文件,没有bundle exec,这个包装器   调用Rubygems,然后使用正常的Rubygems激活   调用gem的可执行文件的机制。这在过去发生了变化   几个月,但Rubygems将调用最新版本的gem   安装在您的系统中,即使您的Gemfile.lock指定了   不同的版本。此外,它将激活最新的   (兼容)安装该gem的依赖项版本,即使是   在Gemfile.lock中指定了不同的版本。 source

答案 2 :(得分:0)

您可以在heroku网站上找到有关使用瘦身的信息。他们也建议使用薄。 http://devcenter.heroku.com/articles/rails3#webserver

答案 3 :(得分:0)