2011-04-25 36 views
22

Tôi đang cố gắng chạy ứng dụng Ruby on Rails trên máy chủ chia sẻ Dreamhost. Tất cả là tốt cho đến nay, ngoại trừ một lỗi lạ tôi đã không thể làm sáng tỏ.Lỗi Phusion Hành khách: Bạn đã kích hoạt giá 1.2.1, nhưng Gemfile của bạn yêu cầu giá 1.2.2

Đôi khi tôi truy cập các ứng dụng web, tôi nhận được trình bày với một lỗi hành khách Phusion nói,

You have already activated rack 1.2.1, but your Gemfile requires rack 1.2.2. Consider using bundle exec.

Khi tôi chỉ làm mới trang có vẻ như để làm việc, mặc dù - không Phusion thông báo lỗi hành khách.

Tiếp theo chủ đề stack overflow khác và tương tự Dreamhost wiki, tôi đã thêm dòng sau vào phía trên cùng của config/environment.rb file:

if ENV['RAILS_ENV'] == 'production' # don't bother on dev 
    ENV['GEM_PATH'] = '/home/myusername/.gems' + ':/usr/lib/ruby/gems/1.8' 
end 

enter image description here

+0

Trang web của tôi hiện đang hoạt động hoàn hảo! – aren55555

Trả lời

9

cố gắng để khởi động lại máy chủ của bạn sau khi chỉnh sửa trong Gemfile của bạn và đặt này: gem 'rack', '1.2.1'

+0

Khi tôi thực hiện một 'bó cài đặt' trên máy chủ sản xuất, tôi nhận được các thông tin sau: ' Bạn đã yêu cầu: rack = 1.2.1 Gói hiện có giá khóa bị khóa 1.2.2. Hãy thử chạy 'rack update rack' ' Vì vậy, tôi chạy lệnh 'bundle update rack', mọi thứ được cập nhật thành công mà tôi nghĩ.Vấn đề với lỗi này là phải mất một thời gian để tái sản xuất (tôi biết nó kỳ lạ) - Tôi sẽ lấy lại cho bạn để xác minh xem đây có phải là giải pháp hay không. – aren55555

+0

xóa 'Femfile.lock' và sau đó thử' bundle install'. Nguyên nhân Gemfile.lock có thông tin về gem và phiên bản của chúng hiện đang được sử dụng cho ứng dụng đường ray của bạn, được tạo ra bởi lệnh bundle đầu tiên của bạn. – Surya

+0

'* Gemfile.lock' – Surya

2

Tôi vừa gặp sự cố này trên Dreamhost. Vấn đề là máy chủ Dreamhost đã cài đặt 1.2.1 và Gemfile của bạn đang tải 1.2.2. Tôi thấy rằng nếu tôi chỉ cần cài đặt giá:

gem install rack 

Sau đó, phiên bản mới nhất của răng (1.2.2 như ngay bây giờ) sẽ được cài đặt vào thư mục đá quý ngôi nhà của bạn (~/.gems). Khi hành khách khởi động, nó sẽ sử dụng 1.2.2.

+0

Tôi sẽ thử, mặc dù @Surya có một giải pháp dường như đang hoạt động. – aren55555

+0

Tôi đã thử giải pháp này nhưng vẫn gặp lỗi giá sai một vài ngày sau đó. –

5

Sau thời gian dài không hoạt động, tôi đã nhận được một lỗi tương tự cho một vài ứng dụng Sinatra trên DreamHost VPS:

Phusion Passenger Error: You have activated rack 1.2.1, but your Gemfile requires rack 1.3.0.

Giống như cách mô tả @ aren55555, nếu bạn chỉ cần làm mới trang, lỗi sẽ biến mất. Dưới đây là một cái gì đó mà tôi phát hiện về cấu hình máy chủ:

[psXXXXX]$ gem env 
RubyGems Environment: 
    - RUBYGEMS VERSION: 1.3.6 
    - RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux] 
    - INSTALLATION DIRECTORY: /home/XXXXXXXXX/.gems/ 
    - RUBY EXECUTABLE: /usr/bin/ruby1.8 
    - EXECUTABLE DIRECTORY: /home/XXXXXXXXX/.gems/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-linux 
    - GEM PATHS: 
    - /home/XXXXXXXXX/.gems/    <-- Rack 1.3.0 Gem was installed here 
    - /usr/lib/ruby/gems/1.8    <-- Rack 1.2.1 Gem was installed here 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :benchmark => false 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - REMOTE SOURCES: 
    - http://rubygems.org/ 

Tôi đoán như những gì đã xảy ra là, sau khi hành khách "thức dậy", vì một lý do nó đang tìm kiếm đầu tiên (hoặc có lẽ chỉ) để các Gems ở cấp hệ thống, chọn Rack 1.2.1 là phiên bản mới nhất. giải pháp hacky ngắn hạn của tôi chỉ đơn giản là để cài đặt Kệ 1.3.0 có:

gem install rack -v 1.3.0 --install-dir /usr/lib/ruby/gems/1.8

Nó dường như đã từng làm việc. Hy vọng điều này là hữu ích cho bất cứ ai khác rách tóc của họ ra khỏi đó.

+0

vâng tôi đã có cùng một vấn đề. thanks – jspooner

5

Tôi có cùng một vấn đề: "Bạn đã kích hoạt giá 1.2.1, nhưng Gemfile của bạn yêu cầu giá 1.2.3"

  1. Thêm vào Gemfile: đá quý 'giá', '1.2.1'
  2. cập nhật gói
  3. gỡ cài đặt phiên bản giá> 1.2.1

    [ong] Danh sách $ ngọc | grep giá

    rack (1.2.1, 1.1.0, 1.0.1, 1.0.0)

  4. lạc tmp/restart.txt

  5. :) hạnh phúc
2

Tôi có vấn đề tương tự với Apache: "Bạn đã kích hoạt giá 1.2.3, nhưng Gemfile của bạn yêu cầu giá 1.2.2. Cân nhắc sử dụng gói exec".

Vấn đề là hành khách rằng cài đặt giá 1.2.3 và lan can của tôi APP giá 1.2.2:

$ gem list |grep rack 
rack (1.2.2, 1.2.3) 

Hãy thử:

$ gem uninstall --version=1.2.3 rack 

khởi động lại máy chủ và giải quyết

3

tôi giải quyết theo cách này trên Dreamhost:

Xóa khỏi Gemfile bất kỳ dòng nào: gem 'rack', ....

rm Gemfile.lock 
rm -rf .bundle 
rm -rf vendor/bundle 

cài đặt/sử dụng đá quý trong nước và tái tạo các tập tin 'Gemfile.lock' với:

bundle install 

cài đặt đá quý trong vendor/bó

bundle install --deployment 

restart:

touch tmp/restart.txt 
1

Tôi đã chiến đấu với vấn đề này hàng giờ trước eventu đồng minh từ bỏ trên Hành khách. Bất kỳ phiên bản mới nào của Rails sẽ sử dụng Hành khách Rack hơn Dreamhost mới hơn yêu cầu.

Tuy nhiên, bạn không cần Hành khách khởi động ứng dụng. Dreamhost cung cấp một số hướng dẫn khá dễ dàng (và làm việc) về làm thế nào để khởi động ứng dụng sử dụng FastCGI, và bạn sẽ không phải tham nhũng Gemfile của bạn trong quá trình này:

http://wiki.dreamhost.com/Rails_3#Using_FastCGI

7

này hoạt động trong Rails 3.0.x & Hành khách 3.0.15

tạo một tập tin:

config/setup_load_paths.rb 

với nội dung:

require 'rubygems' 
require 'bundler/setup' 

Hành khách sẽ tải đá quý giá được chỉ định trong Gemfile.lock

+0

+1 Tôi tin rằng đây là câu trả lời đúng (xem [Tài liệu hành khách] (http://modrails.com/documentation/Users%20guide%20Apache.html#bundler_support)). Tôi đã tìm ra điều này bằng cách đọc 'lib/phusion_passenger/utils.rb' nhưng sau đó lại quên nó khi tôi gặp vấn đề một lần nữa. Cảm ơn lời nhắc. Phương pháp này đặc biệt hiệu quả khi bạn buộc phải chạy các ứng dụng trên các phiên bản giá khác nhau. – Kelvin

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