2013-03-23 21 views
7

Tôi có một máy chủ chủ yếu chạy Ruby 1.8.7, nhưng bây giờ tôi có một ứng dụng Rails 3.2 cần 1.9.3. Tôi đã cài đặt Hành khách 4 vì nó hỗ trợ khả năng chạy nhiều Hồng ngọc trên cơ sở máy chủ ảo.Hành khách 4 với Hành kháchRuby và bộ đá quý khác nhau

Tuy nhiên, có vẻ như trong khi bạn có thể gán một Ruby cụ thể, ứng dụng không có quyền truy cập vào gemset của Ruby đó. Vì vậy, tôi có máy chủ ảo của tôi cấu hình với 1.9.3 Ruby, như khẳng định trên trang lỗi ứng dụng của tôi bây giờ cung cấp cho:

Ruby interpreter command 
/home/aaron/.rvm/rubies/ruby-1.9.3-p0/bin/ruby 

Nhưng tham số GEM_HOME kể một câu chuyện khác nhau:

GEM_HOME = /home/aaron/.rvm/gems/ruby-1.8.7-p352 

Nhìn qua các chỉ thị cấu hình cho Passenger 4, tôi không thấy cách nào để chỉ định một gemset khác. Tôi có thiếu cái gì đó, hoặc là điều này chưa sẵn sàng cho thời gian đầu?

+0

Bạn đang triển khai với capistrano? Theo mặc định, nó cài đặt gem cục bộ, do đó hoàn toàn bỏ qua đường dẫn được chỉ định trong GEM_HOME. Nếu không phải là một giải pháp hoàn chỉnh, có thể là một giải pháp khả thi. – depa

+0

Tôi thiết lập ứng dụng của mình để hoạt động thông qua Capistrano, nhưng điều đó không hiệu quả. Hóa ra cài đặt Hành khách 4 với Ruby 1.8.7 là vấn đề. Khi tôi chạy Hành khách 4 dưới 1.9.3, nó hoạt động tốt. Nhưng đó là một không-đi. :-( –

Trả lời

21

Từ gemset bạn dir chạy:

$ passenger-config --ruby-command 

Nó sẽ cho bạn biết ruby ​​con đường cho Apache và Nginx.

Command: /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 
    Version: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
    To use in Apache: PassengerRuby /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 
    To use in Nginx : passenger_ruby /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 

Nginx: Đối với hành khách 4, bạn có thể chỉ định nhiều phiên bản Ruby. Vì vậy, cho cấu hình máy chủ cụ thể:

your_site.conf:

server { 
    listen 80; 
    root /home/aaron/web/public; 
    passenger_enabled on; 
    passenger_ruby /home/aaron/.rvm/wrappers/[email protected]_gemset/ruby; 
} 

nginx.conf: (chỉ hoạt động này cho hành khách mới 4.0.17)

http { 

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; 

} 

Chỉ cần chạy từ dir gemset của bạn này:

$ passenger-status 

Sẽ kiểm tra xem có passenger_native_support.so hay không. Tùy thuộc vào cài đặt RVM của bạn, bạn có thể cần phải chạy nó với rvmsudo

$ rvmsudo passenger-status 

Dành cho Debian/Ubuntu hiện nay có binary packages of nginx and passenger available mà làm cho quá trình cài đặt dễ dàng hơn nhiều.

6

Tombart chỉ ra: Nếu bạn sử dụng precompiled Passenger modules (trong trường hợp của tôi cho cho Apache2), bạn kết thúc với một hệ thống và chạy.

Tuy nhiên, nếu sử dụng RVM tôi stumbled khi thực tế là bạn cần phải sử dụng các "thư mục wrapper" để chọn đúng RVM ruby ​​phiên bản và gemet như vậy trong vhost Apache của bạn cấu hình:

PassengerRuby /home/of_your_ruby_user/.rvm/wrappers/[email protected]/ruby 

Bằng cách này, Hành khách biết cách tìm đúng gemset liên quan đến thư mục này (../../gems/[email protected]/gems). Nếu không, Hành khách sẽ sử dụng "gemy ruby ​​chuẩn", là số lẻ nếu bạn muốn chạy nhiều ứng dụng với cùng phiên bản ruby. Tôi chỉ có thể đoán rằng điều này tương tự với Nginx.

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