簡體   English   中英

Rails - 使用thin時的bundler錯誤

[英]Rails - bundler error when using 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)。

我運行瘦時遇到以下錯誤(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(事實並非如此,我想不出任何使用它的東西)。

有什么想法嗎?

薄本身取決於 Rack。 並且因為Thin會在加載應用程序之前加載自身,所以當捆綁器首次進入圖片時,最新版本的Rack將被加載。

您必須強制正確版本的Rack to Thin。 從理論上講,你的系統寶石只能使用Rack 1.1.0,但這很難維護或移植。 錯誤消息已包含答案; 使用bundle exec

bundle exec thin start

所以基本上它抱怨我使用機架1.2.1(事實並非如此,我想不出任何使用它的東西)。

我想的是同樣的事情,但情況確實如此。 Rubygems正在使用最新版本。 Bundler允許您通過使用覆蓋此默認值

bundle exec foo

當您向系統安裝gem時,Rubygems會為gem提供的每個可執行文件創建包裝器。 當你從沒有bundle exec的命令行運行一個可執行文件時,這個包裝器調用Rubygems,然后使用普通的Rubygems激活機制來調用gem的可執行文件。 這在過去幾個月已經發生了變化,但Rubygems將調用系統中安裝的最新版本的gem,即使你的Gemfile.lock指定了不同的版本。 此外,它將激活該gem的最新(兼容)安裝版本的依賴項,即使您的Gemfile.lock中指定了不同的版本。 資源

您可以在heroku的網站上找到關於使用瘦身的信息。 他們也建議使用薄。 http://devcenter.heroku.com/articles/rails3#webserver

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM