2010-10-23 28 views
5

Tôi bắt đầu sử dụng trình bao và có một số vấn đề khiến nó hoạt động. Tôi có gemfile sau đây:Rails - lỗi bundler khi sử dụng mỏng

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' 

Lưu ý rằng tôi đặc biệt muốn sử dụng giá 1,1 (1.1.0).

tôi nhận được lỗi sau khi tôi chạy với mỏng (Webrick hoạt động tốt):

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!' 

Vì vậy, về cơ bản nó được phàn nàn rằng tôi đang sử dụng giá 1.2.1 (mà không phải là trường hợp, tôi có thể' t nghĩ về bất cứ điều gì bằng cách sử dụng nó).

Mọi suy nghĩ?

Trả lời

6

Mỏng chính nó depends trên Rack. Và bởi vì Thin sẽ tự tải trước khi tải ứng dụng của bạn, phiên bản mới nhất của Rack sẽ được tải khi bundler đầu tiên vào hình ảnh.

Bạn phải buộc phiên bản đúng của Rack thành Thin. Về lý thuyết bạn chỉ có thể có Rack 1.1.0 trong đá quý hệ thống của bạn, nhưng đó là hầu như không thể duy trì hoặc di động. Thông báo lỗi đã chứa câu trả lời; sử dụng bundle exec.

bundle exec thin start 
+0

Xin chào, cảm ơn công trình này, btw: bắt đầu bó mỏng. – user296489

+0

Vậy làm thế nào để tôi làm việc trên Heroku? – user296489

+0

Tôi không thể giúp bạn với Heroku, có lẽ tài liệu bundler của họ sẽ giúp: http://docs.heroku.com/bundler – molf

2

Về cơ bản, tôi phàn nàn rằng tôi đang sử dụng giá 1,2.1 (là không phải vậy, tôi không thể nghĩ ra bất kỳ thứ gì sử dụng nó).

Tôi nghĩ điều tương tự nhưng đúng như vậy. Rubygems đang sử dụng phiên bản mới nhất. Bundler cho phép bạn ghi đè mặc định này bằng cách sử dụng

bundle exec foo 

Khi bạn cài đặt một viên ngọc vào hệ thống, Rubygems tạo giấy gói cho mỗi thực thi mà các viên ngọc tạo sẵn. Khi bạn chạy một tệp thực thi từ dòng lệnh mà không có gói exec, trình bao bọc này gọi Rubygems, sau đó sử dụng cơ chế kích hoạt Rubygems bình thường để gọi thực thi của đá quý. Điều này đã thay đổi trong quá khứ vài tháng, nhưng Rubygems sẽ gọi phiên bản mới nhất của đá quý được cài đặt trong hệ thống của bạn, ngay cả khi Gemfile.lock của bạn chỉ định một phiên bản khác nhau . Ngoài ra, nó sẽ kích hoạt phiên bản mới nhất (tương thích) được cài đặt của các phụ thuộc của viên đá quý đó, ngay cả khi phiên bản khác nhau được chỉ định trong Gemfile.lock của bạn . source

Các vấn đề liên quan