2012-03-30 24 views

Trả lời

18

Đường ray không sử dụng Rack::Static, nó có phiên bản riêng, ActionDispatch::Static. Bạn sẽ thấy nó nếu bạn chạy rake middleware.

Điều này chỉ được thêm vào ngăn xếp trung gian Rails if config.serve_static_assets is true. Cài đặt này defaults to true, nhưng mặc định được tạo ra config/environments/production.rb turns if off. Ý tưởng là trong quá trình phát triển, bạn có một quy trình đơn giản mà bạn có thể chạy và kiểm tra mọi thứ đang hoạt động và hiệu suất không phải là vấn đề, nhưng khi bạn triển khai sản xuất, bạn cấu hình máy chủ web của mình (thường là Apache hoặc Nginx) để phục vụ các tệp tĩnh vì nó tốt hơn nhiều so với Ruby.

Nếu bạn sử dụng Heroku, ngăn xếp Cedar mới nhất của chúng không sử dụng máy chủ web riêng biệt cho các tệp tĩnh, do đó, một phần của deploy process chúng tiêm Rails plugin to serve static assets. Tất cả plugin này đều được đặt serve_static_assets thành true.

6

Điều đó tùy thuộc. Nếu bạn đang sử dụng một cái gì đó như phusion passenger để chạy ứng dụng của bạn, hành vi mặc định của nó là sử dụng Apache trực tiếp và bỏ qua các đường ray cho bất kỳ nội dung tĩnh nào. Nếu bạn đang sử dụng webrick (máy chủ đường ray), nó sẽ sử dụng rất nhiều đường ray/mã rack để thực hiện việc phục vụ tĩnh. Một lưu ý, nếu bạn đang sử dụng apache/nginx với hành khách: trong chế độ sản xuất, vì mặc định là để cho apache phục vụ tất cả nội dung tĩnh, bạn sẽ cần chạy rake assets:precompile trên ứng dụng trước khi khởi chạy nó trong apache hoặc nội dung tĩnh không được đặt ở nơi cần apache để có được nó nhanh chóng và trong một hình thức sẵn sàng.

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