2011-10-04 48 views
9

Chỉ mới bắt đầu thích nghi với đường ray 3.1, tôi bắt đầu viết coffeescript và sass và mọi thứ hoạt động tốt trong phát triển. Khi tôi chạy máy chủ trong sản xuất, tôi chỉ nhận được:Rails 3.1 tài sản không có dấu vân tay trong sản xuất

<link href="/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" /> 
    <script src="/javascripts/application.js" type="text/javascript"></script> 

trong mã nguồn của trang, không có hashcode tạo ra và cả tài sản có lỗi định tuyến:

Routing Error 
No route matches [GET] "/stylesheets/application.css" 

nguyên nhân của việc này là gì ? Tôi có quên làm gì không?

thiết lập trong môi trường/production.rb:

# Settings specified here will take precedence over those in config/application.rb 

    # Code is not reloaded between requests 
    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 
    config.consider_all_requests_local  = false 
    config.action_controller.perform_caching = true 

    # Disable Rails's static asset server (Apache or nginx will already do this) 
    config.serve_static_assets = false 

    # Compress JavaScripts and CSS 
    config.assets.compress = true 



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

    # Generate digests for assets URLs 
    config.assets.digest = true 

    config.active_support.deprecation = :notify 

Thank you very much.

Thêm biết thêm thông tin:

trong layouts/application.html.erb, Tôi đang sử dụng sau đây để bao gồm tài sản:

<%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 

Và tôi đã cố gắng bundle exec rake assets:precompile mà chạy mà không có đầu ra bất cứ điều gì và sau đó chạy rails s -e production, sự cố vẫn tiếp diễn.

Và tôi cũng đã cố gắng đặt config.assets.compile = true và sau đó chạy rails s -e production, sự cố vẫn tiếp diễn.

Vui lòng trợ giúp.

Thông tin khác. Tôi đã thấy rằng các js và css được biên dịch được tạo ra trong thư mục công cộng/tài sản, nhưng trong môi trường sản xuất, các tệp được bao gồm mà không có mã băm.

Trợ giúp.

Giải pháp: Chỉ cần kiểm tra lại dự án của tôi và thấy nguyên nhân gốc là khi tôi đang chỉnh sửa ứng dụng.rb để hỗ trợ mongodb. Tôi vô tình nhận xét

require "sprockets/railtie" 

bỏ ghi chú sau đó mọi thứ đều ổn.

Hãy để điều này cho người khác nhắc nhở sai lầm tân binh của tôi.

Cảm ơn bạn rất nhiều Richard. Câu trả lời của bạn không phải là cuối cùng anwser nhưng nó giúp rất nhiều, thực sự xứng đáng một cuộc bỏ phiếu lên.

Trả lời

3

Kiểm tra xem bạn có các đường ống dẫn bật trong application.rb:

config.assets.enabled = true

Bạn đang sử dụng các phương pháp helper đúng để viết các thẻ? Các phương thức trợ giúp không nên có/styleheets và/javascript trong đường dẫn. Như thế này (bên trong erb):

 
javascript_include_tag "application" 
stylesheet_link_tag "application" 

Bạn cũng sẽ cần chạy tác vụ biên dịch trước như một phần của quá trình triển khai để tạo tệp, vì bạn đã đặt biên dịch thành sai.

asset pipeline guide cho biết cách thiết lập tính năng này bằng capistrano.

+0

Cảm ơn Richard, tôi đã thêm thông tin bổ sung vào bài đăng chính. Tôi có phải sử dụng capistrano để có được tính năng này không? Tôi chỉ cố gắng để chạy "rails s -e sản xuất" trên địa phương của tôi. – larryzhao

+0

Nếu bạn là người địa phương, thì bạn phải chạy nó cục bộ. Bạn chỉ cần nhiệm vụ Capistrano nếu đó là cách bạn triển khai đến một môi trường sản xuất sản xuất. Nâng cấp ứng dụng của bạn lên 3.1.1.rc2 và chạy lại tác vụ. Tôi nghĩ rằng có một số bản sửa lỗi trong nhiệm vụ biên dịch trước có thể sửa lỗi này. –

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