5

我开始使用 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'

请注意,我明确表示要使用机架 1.1 (1.1.0)。

当我使用瘦运行时出现以下错误(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 将在 bundler 首次进入图片时加载。

您必须强制使用正确版本的 Rack to 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 的可执行文件。这在过去几个月中发生了变化,但 Rubygems 将调用安装在您系统中的最新版本的 gem,即使您的 Gemfile.lock 指定了不同的版本。此外,即使在 Gemfile.lock 中指定了不同的版本,它也会激活该 gem 的最新(兼容)安装版本的依赖项。资源

于 2014-06-04T18:36:27.663 回答
0

另请参阅这篇有用的博文

于 2012-04-24T12:59:01.040 回答
0

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

于 2011-07-11T22:13:12.293 回答