2013-09-04 33 views
11

Tôi đang sử dụng Ruby 2.0.0-p247Rails 4.0.0file được tạo ra bởi tài sản: tiền biên dịch không phù hợp với các url được tạo ra bởi stylesheet_link_tag (thiếu tiêu hóa) trong đường ray tối thiểu 4 trang web

Nếu tôi thực hiện một Rails tối thiểu 4 trang web như thế này:

rails new minimal 
cd minimal 
rails generate controller home index 
tee config/routes.rb <<EOF 
Minimal::Application.routes.draw do 
    root 'home#index' 
end 
EOF 

Sau đó, tiền biên dịch tài sản với

rake assets:precompile 

Nó tạo ra tài sản như:

I, [2013-09-04T17:05:36.992951 #3549] INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-723d1be6cc741a3aabb1cec24276d681.js 
I, [2013-09-04T17:05:37.052303 #3549] INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-f1a14051f17824976271b9c0460232f0.css 

Nhưng nếu tôi bắt đầu máy chủ trong chế độ sản xuất, với

RAILS_ENV=production rails s 

Các URL được tạo ra trong HTML không chỉ ở các tập tin biên dịch sẵn:

<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" /> 
<script data-turbolinks-track="true" src="/javascripts/application.js"></script> 

tôi mong chờ, chứ không phải :

<link data-turbolinks-track="true" href="assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" /> 
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script> 

Cài đặt mặc định config/environments/production.rb nói để sử dụng thông báo:

config.assets.digest = true 

Nhưng dường như bị bỏ qua có chọn lọc?

Tôi có thiếu gì đó không?

UPDATE:

tôi chỉ thử nghiệm điều này trong Rails 4.2.3 và điều này dường như được cố định, tuy nhiên chúng ta cần phải trao một vài biến môi trường hơn vào lệnh rails s để bắt đầu trong chế độ sản xuất:

SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production rails s 

Trả lời

12

Trong khi tôi đang viết lên câu hỏi này, tôi đã xem qua bài đăng trên blog này cho thấy đây là lỗi.

http://railsblog.kieser.net/2013/08/rails4-phusion-passenger-asset-pipeline.html

Trong số những gợi ý khác nhau, chỉ cần thiết lập dự phòng biên soạn đúng ...

config.assets.compile = true 

có vẻ là đủ để kick Rails để tạo URL tiêu hóa một cách thích hợp:

<link data-turbolinks-track="true" href="/assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" /> 
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script> 

Một gợi ý khác, thiết lập rõ ràng RAILS_ENV và RAILS_GROUPS dường như tạo ra các chuỗi tiêu hóa khác nhau trên các tệp biên dịch sẵn, nhưng chúng luôn có vẻ khớp với HTML được tạo bất kể.

+0

Tôi thường đặt RAILS_ENV = sản xuất. Điều này có vẻ là hồi quy từ 3.2.x: ( –

+3

'config.assets.compile = true' sẽ có các vấn đề về hiệu năng trong sản xuất, tôi nghĩ rằng – Johann

+0

@Johann nếu yuou vẫn đang làm tài sản 'rake: precompile' khi bạn triển khai (như bạn sẽ biết nếu' config.assets.compile' là 'false') mã nên không bao giờ thực sự được nhấn (vì nó sẽ luôn luôn nhìn thấy các phiên bản biên dịch sẵn và phục vụ chúng). – pix

0

Tôi đã có thể giải quyết các liên kết nội dung không bao gồm thông báo bằng cách chạm vào số phiên bản nội dung.

 # Version of your assets, change this if you want to expire all your assets 
- config.assets.version = '1.0' 
+ config.assets.version = '2.0' 

Bạn sẽ tìm thấy điều này hoặc trong config/application.rb nếu bạn đang nâng cấp hoặc ở vị trí mới config/initializers/asset.rb