2011-12-08 39 views
9

Tôi đang chạy Rails 3.1.3, bao gồm Sprockets 2.0.3 làm phụ thuộc.Đường dẫn nội dung đường ray trên dàn dựng: vân tay chính xác nhưng 404ing

Tôi thiết lập môi trường dàn dựng của mình để được định cấu hình theo hướng dẫn của Rails đề xuất cho sản xuất.

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = false 
config.assets.digest = true 

tôi đã đưa vào Capfile tôi

load 'deploy' 
load 'deploy/assets' 

Và tài sản được biên dịch sẵn như mong đợi trên triển khai.

Ở nơi công cộng/tài sản, tôi thấy nội dung như dự kiến ​​có vân tay.

application-bd402855d34fb61e0a1690da06f79f20.js 
application-bd402855d34fb61e0a1690da06f79f20.js.gz 
application-ed3f9a8d23992790841c11b6692fb576.css 
application-ed3f9a8d23992790841c11b6692fb576.css.gz 
...and a bunch of images... 

Khi tôi tải trang, tôi thấy tham chiếu chính xác, vân tay và tất cả.

<link href="/assets/application-ed3f9a8d23992790841c11b6692fb576.css" media="screen" rel="stylesheet" type="text/css"> 
<script src="/assets/application-bd402855d34fb61e0a1690da06f79f20.js" type="text/javascript"></script> 

Tuy nhiên, mọi thứ 404, css, js, hình ảnh, mọi thứ.

Bất kỳ ai biết thỏa thuận ở đây là gì? Cảm ơn!

+0

Bạn đang chạy dàn dựng là 'sản xuất' hay bạn có tệp cấu hình staging.rb? Nếu có, bạn có thể không có các tùy chọn đường ống chính xác trong đó. –

+0

Dàn dựng được thiết lập với các tùy chọn cấu hình ở trên, giống như những gì hướng dẫn Rails gợi ý cho sản xuất. Tôi muốn khá nhiều hành vi tương tự. Điều đó có đúng không? – cotopaxi

+0

Sẽ ổn thôi. Tôi sẽ suy nghĩ về điều này một số chi tiết ... –

Trả lời

0
config.assets.compile = false 

nên là:

config.assets.compile = true 

Ngoài ra, hãy chắc chắn xóa bộ nhớ cache của bạn:

bundle exec rake tmp:cache:clear 

và khởi động lại máy chủ.

+2

Biên soạn tài sản trực tiếp dẫn đến hiệu suất kém hơn. – Maarten

0
config.assets.compile = false 

Nó phải là sự thật

1

Mặc dù gợi ý trong câu trả lời khác

config.assets.compile = true 

... là một cách giải quyết, không phải là một giải pháp. Tùy chọn này cho phép Rails quay trở lại việc biên dịch trực tiếp các nội dung không thể tìm thấy ở nơi công cộng/tài sản. Nó có thể 'giải quyết' vấn đề của bạn trong dàn dựng nhưng có Rails biên dịch tài sản tại thời gian chạy là không chính xác tối ưu trong sản xuất.

Tôi nhớ trong những tháng đầu làm việc với đường ống nội dung mới trong Rails 3.1.x rằng tôi đã gặp sự cố với cả việc nén và tạo các thông báo mà tôi chỉ thực sự được giải quyết trong các phiên bản sau. Tôi muốn đề xuất dùng thử

config.assets.compress = false 
config.assets.digest = false 

cả hai riêng lẻ và cùng nhau. Và/hoặc nâng cấp lên phiên bản mới hơn của Rails hoặc các đường ống dẫn nội dung.

0

Tôi đã gặp sự cố tương tự vài tháng trước. Đối với một vài lý do tôi đã chọn để đi với bằng tay kích hoạt việc biên dịch tài sản trong sản xuất để sản xuất của tôi.rb có

config.assets.compile = false 

và triển khai capistrano cũng có một nhiệm vụ để hành tiền biên dịch tài sản (sử dụng RVM cũng):

run "cd #{release_path} && RAILS_ENV=production bundle exec rake assets:precompile", shell: fetch(:rvm_shell) 

Bước cuối cùng đã được đảm bảo rằng chúng tôi symlinked thư mục nội dung để chúng tôi không cần phải biên dịch lại các tài sản không thay đổi.

run "ln -nfs #{shared_path}/assets #{release_path}/public/assets" 
1

Nếu bạn chắc chắn nội dung đang được biên soạn và tồn tại trong thư mục công khai, nó có thể là cài đặt máy chủ web của bạn không? Về môi trường sản xuất/dàn dựng, các tài sản không nên nhấn vào ứng dụng đường ray và được phục vụ trực tiếp từ máy chủ web. Đây là đoạn mã cấu hình apache ví dụ:

<LocationMatch "^/assets/.*$"> 
     Header unset ETag 
     FileETag None 
     # RFC says only cache for 1 year 
     ExpiresActive On 
     ExpiresDefault "access plus 1 year" 

     SetEnv no-gzip 
     RewriteEngine on 
     # Make sure the browser supports gzip encoding before we send it 
     RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b 
     RewriteCond %{REQUEST_FILENAME}.gz -s 
     RewriteRule ^(.+) $1.gz [L] 

    </LocationMatch> 

    <FilesMatch \.css\.gz$> 
     ForceType text/css 
     Header set Content-Encoding gzip 
    </FilesMatch> 

    <FilesMatch \.js\.gz$> 
     ForceType text/javascript 
     Header set Content-Encoding gzip 
    </FilesMatch> 
Các vấn đề liên quan