2012-01-31 22 views
9

Tôi không thể kiểm tra trang web của mình ở chế độ sản xuất bằng WebRick, vì nó đang tăng lỗi bộ nhớ cache. Trong chế độ phát triển và thử nghiệm, mọi thứ hoạt động hoàn hảo.Tại sao tôi nhận được "cache: [GET /] miss" trong quá trình sản xuất bằng WebRick?

tôi đã đặt tùy chọn này trong config/môi trường/production.rb:

config.serve_static_assets = true 

Và sau đó tôi chạy:

bundle exec rake assets:precompile 

Bây giờ tôi bắt đầu lên máy chủ:

david$ rails s -e production 
=> Booting WEBrick 
=> Rails 3.2.1 application starting in production on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
[2012-01-31 19:52:35] INFO WEBrick 1.3.1 
[2012-01-31 19:52:35] INFO ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0] 
[2012-01-31 19:52:35] INFO WEBrick::HTTPServer#start: pid=13329 port=3000 

Và khi tôi đi đến http://localhost:3000 Tôi nhận được "Chúng tôi xin lỗi, nhưng đã xảy ra sự cố". Trong thiết bị đầu cuối này là kết quả đầu ra:

cache: [GET /] miss 

Tôi bị dừng ở đây. Tôi không biết phải làm gì.

+0

Bạn đã thay đổi 'config.cache_store' trong application.rb chưa? – Baldrick

+0

Không, ứng dụng mới, tôi chưa chạm vào tập tin đó. –

+0

Ok. Có lỗi trong 'production.log' không? – Baldrick

Trả lời

5

Vấn đề là với các đường ống dẫn tài sản, trong đó có được cấu hình tốt trong chế độ sản xuất, vì các tệp không được biên dịch tự động.

Trong trường hợp của tôi, tôi đã chèn một tệp javascript (với javascript_include_tag) chỉ xuất hiện trong một trang, vì vậy nó không được bao gồm trong tệp kê khai application.js.

Trong trường hợp đó, đường dẫn nội dung không được biên dịch trước tệp khi chạy assets:precompile.

Để bao gồm các tập tin bị mất, chúng ta phải sửa config/environments/production.rb và thêm dòng này:

config.assets.precompile += %w(script1.js) 

Bạn sẽ nhận thấy rằng dòng này đã tồn tại, nhưng nó lại nhận xét. Đọc nhận xét để biết rõ hơn. Để biết thêm thông tin, hãy xem official asset pipeline guide.

0

Thông báo này về các trang bị thiếu gửi Rack :: Cache middleware. Nếu bạn không cần phải sử dụng trang bộ nhớ đệm trong ứng dụng ray của bạn, chỉ cần loại bỏ Kệ :: Cache trong config/tập tin application.rb:

require 'rack/cache' 

module DemoApp 
    class Application < Rails::Application 
    config.middleware.delete Rack::Cache 
    # ... 
    end 
end 
+1

Tôi đã không phải là downvote - nhưng nói với OP không sử dụng một tính năng không giải quyết vấn đề của mình. – Basic

+0

@Basic Thx, tôi hiểu sai lầm của tôi – ilya

0

Là giải pháp tạm thời, sau đây đã thực hiện thủ thuật cho tôi.

Tôi đã thay đổi tập tin config/environments/production.rb thay đổi config.assets.compile dòng từ false để true

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = true 
0

Để chạy ứng dụng trong sản xuất, do đó bạn không nhận được cache: [GET /] bỏ lỡ hãy kiểm tra bạn {} dự án/public thư mục, là bất kỳ thư mục tài sản nào của chúng có tồn tại nếu không thì biên dịch trước tài sản bằng cách sử dụng tài sản thực thi bó: biên dịch trước

lần này được thực hiện:

thiết config.assets.compile để đúng trong sản xuất.rb

Sau đó khởi động lại bạn WebApp trong môi trường sản xuất.

Chấp thuận này làm việc cho tôi hy vọng sẽ phù hợp với bạn.

Nếu bạn đang sử dụng đường ray 3.2.0, bạn sẽ bị thiếu [GET /], nhưng ứng dụng của bạn sẽ hoạt động bình thường.

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