2011-11-15 22 views
13

Tôi nhận được lỗi sau đây trong nginx (với 403) khi tôi truy cập .com:Rails 3.1, nginx, chỉ số thư mục tải hành khách bị cấm

[error] 5384#0: *1 directory index of "/u/apps/<app-name>/current/public/" is forbidden 

Tôi đang trên Ubuntu 10.04 và tôi không thể cho cuộc sống của tôi có được nginx, Hành khách, Rails 3.1, và Capistrano để chơi độc đáo.

Tôi đang triển khai đến/u với Capistrano. Mọi thứ trong/u là 755, thuộc sở hữu của người dùng ứng dụng.

/u/apps // hiện tại/công khai/có tất cả nội dung của tôi, hình đại diện và mọi thứ khác bạn mong muốn.

Khi tôi thêm autoindex on vào nginx.conf Tôi nhận được một danh sách thư mục/công cộng, dẫn tôi tin rằng tôi không có vấn đề về quyền.

tập tin nginx.conf của tôi là mặc định mong đợi cho:

server { 
    listen 80; 
    server_name <app-name>.com; 
    passenger_enabled on; 
    root /u/apps/<app-name>/current/public/; 
} 

Và Capistrano tôi deploy.rb tập tin không có gì bất thường.

Bất kỳ ý tưởng nào tại sao ứng dụng đường ray dường như không bắt đầu?

Trả lời

27

Được rồi, tôi đã trả lời câu hỏi của riêng mình. Tôi đã thiếu cấu hình passenger_ruby và passenger_root trong tệp nginx.conf của tôi. Lưu ý rằng đường dẫn passenger_ruby cần phải là trình bao bọc nếu bạn đang sử dụng RVM.

passenger_root /usr/local/rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.9; 
passenger_ruby /usr/local/rvm/wrappers/ruby-1.9.2-p290/ruby; 
+1

Vâng, nếu điều này giải quyết được vấn đề của bạn, hãy tiếp tục và chấp nhận câu trả lời của riêng bạn. – Nightfirecat

+0

Xong - cảm ơn cho tip :) – alexlod

+0

Bất kỳ ý tưởng tại sao nó phải là trình bao bọc? Tôi không thực sự biết các thư mục khác nhau về trong RVM nhưng tại sao không bin thay vào đó? –

11

Nếu bạn đã có passenger_rootpassenger_ruby trong nginx.conf của bạn, nhưng có lỗi này, bạn phải có một số khối địa điểm. Sau đó, bạn phải chỉ định passenger_enabled on; bên trong mỗi khối vị trí.

+1

Điều này lừa các trick cho tôi, tôi quên thêm hành khách_enabled vào cấu hình trang web. – Joe

+0

Không đúng trong trường hợp của tôi. Tôi không có khối vị trí, nhưng tôi vẫn gặp lỗi này. – robguinness

+2

Tôi không có khối vị trí nào nên tôi đã thêm một vị trí/{hành khách_enabled vào; } ' – adamo

4

Xin lỗi để trả lời câu hỏi cũ, nhưng dường như có liên quan (ít nhất là đối với tôi ;-)) Tôi gặp sự cố tương tự và quản lý để giải quyết nhờ bài đăng này nhưng theo cách khác. Ngoài ra, bạn có thể thiết lập các /etc/nginx/nginx.conf sử dụng:

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

Và sau đó hãy chắc chắn rằng các locations.ini là hiện tại bằng cách chạy:

passenger-config --make-locations-ini 

Như đã nói, điều này làm việc đối với tôi, mặc dù tôi không phải là một chuyên gia, có lẽ tôi đang chơi với các thông số sai.

5

Trong trường hợp bạn đang chạy vào điều này với hành khách 5+ và ứng dụng Rails của bạn là một ứng dụng 2.3.x, bây giờ bạn cần phải thêm một tập tin config.ru để ứng dụng của bạn:

# Require your environment file to bootstrap Rails 
require ::File.dirname(__FILE__) + '/config/environment' 

# Serve static assets from RAILS_ROOT/public directory 
# use Rails::Rack::Static 
# Dispatch the request 
run ActionController::Dispatcher.new 

Xem thêm chi tiết trong official announcementgithub ticket.

Tôi biết câu hỏi của OP là về Rails 3.1 cụ thể nhưng muốn bao gồm điều này ở đây vì đầu ra giống hệt nhau và các tìm kiếm dẫn tôi đến bài đăng này.

+0

Điều này giải quyết vấn đề của tôi. Cảm ơn @Matt Sanders –

+0

Tuyệt vời, vui vì nó đã giúp! –

+1

Đã dành 3 giờ để tìm kiếm thông tin này! Nhiều kudo. Cảm ơn!! –

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