2012-04-06 18 views
14

Tôi tương đối mới đối với RoR và tôi tò mò về lý do tại sao Rails biên dịch nội dung cả khi có và không có md5 băm để sản xuất?Rails biên dịch tài sản cả khi có và không có md5 băm, tại sao?

tôi chạy bundle exec rake assets:clean sau đó bundle exec rake assets:precompile

production.rb My file:

MyApp::Application.configure do 

    # 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.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

    config.assets.precompile += %w(tos.js, tos.css) 

    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

end 

ứng dụng tôi làm việc với các tập tin với băm trong tên của họ và đó là cách nó phải ở trong trường hợp của tôi :)

Vì vậy, tôi có hai câu hỏi tại đây:

1) Tại sao nó xảy ra khi được biên dịch?

Rails biên dịch tài sản cả có và không có md5 hash cho sản xuất

2) những tập tin (không băm là gì) cho?

Có lẽ tôi không nhận được gì đó, vì vậy, xin vui lòng ai đó có thể giải thích.

Trả lời

14

Lý do nó là để bạn có thể truy nhập tệp mà không biết vân tay MD5 (ví dụ trong ứng dụng không có đường ray hoặc tệp trong ứng dụng đường ray không được biên soạn hoặc chạy bởi ngăn xếp đường ray) Trong trường hợp này bạn sẽ phải biên dịch các tài sản sau đó thay đổi các liên kết css/js trong các tệp HTML tĩnh mỗi khi bạn cập nhật mã (do đó gây ra một thay đổi trong hàm băm MD5). Vì vậy, thay vào đó đường ray tạo ra 2 bản sao của mỗi tập tin tài sản, một cái có dấu vân tay trong tên tập tin, cái còn lại không có (ví dụ: application-731bc240b0e8dbe7f2e6783811d2151a.css và application.css) Phiên bản dấu vân tay rõ ràng là được ưa thích hơn (xem 'what is fingerprinting and why should I care'). 'trong số rails asset pipeline guide). Nhưng không phải thông báo phiên bản ed là có một dự phòng.

Như một ý nghĩ cuối cùng về vấn đề tôi sẽ đọc một yêu cầu kéo sau đây để rails git repo: https://github.com/rails/rails/pull/5379 nơi họ đang thảo luận về ưu và nhược điểm của tên tệp không được tiêu hóa và khả năng có thể để tắt tính năng biên dịch chúng.

HTH

+0

Xin chào Chris cảm ơn bạn đã trả lời và giải thích, tôi nghĩ rằng tôi đã có một số cấu hình sai gây ra hành vi này. Nếu đây là cách nó nên sau đó nó ok với tôi. Cảm ơn một lần nữa. –

+1

Ở mặt trái của mọi thứ, cài đặt Rails của tôi có cùng cấu hình giống như của anh ta, nhưng nó CHỈ biên dịch các tài sản bằng dấu vân tay và không biên dịch các phiên bản mà không có dấu vân tay. Điều này là rất khó chịu vì những lý do được liệt kê bởi Chris Bailey. Bất kỳ ý tưởng làm thế nào tôi có thể sửa lỗi này? – NudeCanalTroll

+2

@NudeCanalTroll: Bạn không chạy 'tài sản rake: biên dịch trước: nondigest'. – jpatokal