2012-03-14 44 views
17

Khi ở chế độ sản xuất, đường ray dường như không tìm thấy bất kỳ tài sản biên dịch sẵn nào từ đường ống nội dung.Tại sao Rails không tìm thấy tài sản của tôi?

Tôi đang sử dụng đường ray 3.2.0 và ruby ​​1.9.3 chạy bên trong RVM trên CentOS. Không có máy chủ web bổ sung nào đang chạy cùng với ứng dụng này. Ứng dụng này chỉ được cập nhật gần đây để sử dụng đường ống nội dung, vì ban đầu nó là một ứng dụng đường ray 3.0.

Sau khi chạy

rake assets:clean 
rake assets:precompile 

tôi thấy nội dung băm ở nơi công cộng/tài sản, như tôi mong đợi. Các băm ở cuối các tệp khớp với các tệp tôi thấy trong nguồn trang.

Tuy nhiên, tại thời gian chạy, đây là những gì tôi nhìn thấy cho mỗi Rails tài sản cố gắng phục vụ:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

tôi không ám chỉ đến thư mục mà mỗi tài sản được đặt trong; tất cả các tham chiếu đến các tài sản như thế này:

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 

đường ống Asset thiết lập thích hợp trong production.rb:

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

Và cuối cùng, thiết lập tài sản từ config/application.rb:

config.assets.enabled = true 
config.assets.version = '1.0' 

Người dùng bắt đầu quá trình máy chủ rails đã đọc, viết và thực thi quyền trên public/asset, vì vậy tôi không nghĩ đó là vấn đề quyền. Tôi đã bỏ lỡ một bước cấu hình chưa?

Sửa

tôi nhận thấy rằng không có lỗi nói rằng tài sản không được biên dịch sẵn, vì vậy tôi đã cố gắng để truy cập vào một stylesheet từ trang web bằng cách thêm "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" vào cuối đường dẫn máy chủ:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

Làm việc này và biểu định kiểu đã mở.

+0

Liên quan/trùng lặp: http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found –

Trả lời

26

Tiếp tục nghiên cứu về vấn đề này mang lại này SO Bài chi tiết:

application.css not being served as an asset

Dường

config.serve_static_assets = false 

là một thiết lập không chính xác chừng nào ứng dụng Rails của tôi không chạy đằng sau Apache hoặc nginx

+0

Tôi đã bị phát hiện bởi điều này. Thường sử dụng Apache nhưng trong dịp này đã sử dụng Thin thông qua IIS. Cảm ơn! – kim3er

4

Tôi đã gặp vấn đề tương tự, nhưng tôi lưu ý rằng biểu định kiểu của bạn trỏ đến dấu vân tay, không được lưu trong bộ nhớ cache phiên bản của các tập tin. Nếu bạn đang sử dụng đường dẫn nội dung, để tận dụng lợi thế của nó, bạn cần phải sử dụng những người trợ giúp trỏ đến phiên bản tệp được lưu trong bộ nhớ cache, được lưu trong bộ nhớ cache. Để làm điều này, bạn sẽ cần phải nhúng erb vào tệp css của bạn hoặc sử dụng sass.

Sai:

.class { 
    background: url(asset.png) no-repeat; 
} 

đúng (sử dụng sass):

.class 
    background: image-url('asset.png') no-repeat 

Mọi chi tiết, xem tại đây: http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

Nếu bạn không quan tâm về các vấn đề hiệu suất, bạn có thể lấy đi bằng cách sử dụng các phiên bản không được lưu trữ cho đến khi bạn nâng cấp lên Rails 4 hoặc Rails 3.2.16, vì các phiên bản đó giới thiệu các thay đổi đột phá buộc bạn sử dụng đường dẫn nội dung (và s tương ứng cú pháp). Nếu bạn không sử dụng cú pháp mới, các phiên bản không được lưu trong bộ nhớ cache sẽ hoàn toàn không hoạt động.

+0

Xin cảm ơn! Vì câu hỏi này đã được đăng, tuy nhiên, chúng tôi đã chuyển tài sản sang CDN, nhưng tôi sẽ nhớ điều này cho các dự án Rails trong tương lai! – BrMcMullin

+0

Bạn được chào đón! : D –

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