2012-04-11 7 views
29

Ứng dụng của tôi chạy tốt ở chế độ phát triển.đường ray 3.1.3: cố gắng chạy cục bộ trong sản xuất, đường ống nội dung không hoạt động

Khi tôi chạy ở chế độ sản xuất bằng cách sử dụng RAILS_ENV=production rails s, không có tệp .css hoặc .js nào của tôi được tải. (Tôi đã làm tài sản tiền biên dịch, sử dụng RAILS_ENV=production bundle exec rake assets:precompile.)

Nhật ký webrick cho thấy:

ActionController :: RoutingError (Không có trận đấu đường [GET] "/assets/application-a73ce43be7bf75953cd0c60b2b4a7eb0.js"):

ActionController :: RoutingError (Không có trận đấu đường [GET] "/assets/application-986dd79830088c416c1632c12999ec69.css"):

các tập tin được biên soạn (theo file log \ production.log) và tôi thư mục công khai/tài sản hiển thị các tệp đó có và không có vân tay:

ls public/assets 
application-986dd79830088c416c1632c12999ec69.css 
application-986dd79830088c416c1632c12999ec69.css.gz 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js 
application-a73ce43be7bf75953cd0c60b2b4a7eb0.js.gz 
application.css 
application.css.gz 
application.js 
application.js.gz 

Trả lời

47

Đường ray không phân phối nội dung tĩnh ở chế độ sản xuất theo mặc định. Nếu bạn muốn vô hiệu hóa này và phục vụ tài sản tĩnh, cập nhật tập tin config/environments/production.rb của bạn với điều này:

config.serve_static_assets = true 

Lý do đằng sau cấu hình mặc định Rails' là nó giả định bạn sẽ được chạy phía sau một máy chủ web tiêu chuẩn trong phương thức sản xuất (Apache, Nginx, v.v.) sau đó sẽ ủy quyền các yêu cầu cho ứng dụng Rails của bạn. Vì các tài sản được biên dịch sẵn, Apache/Nginx/etc. có thể trực tiếp phục vụ họ mà không cần phải nói chuyện với quy trình Rails của bạn.

+0

có ý nghĩa ngay bây giờ - cảm ơn vì lời giải thích tuyệt vời. – jpwynn

+0

@Dylan Chỉ cần chạy vào cùng một vấn đề - cảm ơn lời giải thích tuyệt vời! – weltschmerz