2013-01-25 35 views

Trả lời

21

Trong env sản xuất, Rails sẽ không chịu trách nhiệm phân phát nội dung tĩnh. Vì vậy, bạn đang nhận được lỗi này.

này được điều khiển bởi thiết lập này trong config/môi trường/production.rb trong ứng dụng của bạn:

config.serve_static_assets = false 

Bạn có thể thiết lập để mà đúng

hoặc thử này

rake assets:precompile 

lệnh (biên dịch và sao chép hình ảnh, css và js từ ứng dụng/tài sản sang công khai /.

+1

Lưu ý * Bạn nên đảm bảo cài đặt này được đặt trong quá trình sản xuất chứ không phải ứng dụng.rb. Chỉ cần gây ra một giờ đau đầu cho tôi. –

+3

'config.serve_static_files' trong Rails 4 – rendon

+1

' config.public_file_server.enabled = true' trong Rails 5. Khuyến cáo chỉ sử dụng trong development.rb, chứ không phải production.rb, vì máy chủ web (ví dụ, Apache, Nginx) sẽ phân phát nội dung trong sản xuất. – CFitz

20

Nếu bạn nâng cấp lên phiên bản mới của Rails (Rails 4 và Rails 3.2.16), và bạn đột nhiên bắt đầu thấy lỗi này, có khả năng biểu định kiểu của bạn trỏ đến dấu vân tay, không phiên bản được lưu trong bộ nhớ cache của các tệp. 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 mới trỏ đến phiên bản tệp được lưu trong bộ nhớ cache, được lưu trong bộ nhớ cache. Để làm như vậ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.

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

.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

+2

Điều này bit tôi sau khi nâng cấp lên Rails 3.2.16, do đó, nó không chỉ là 4.x. –

+1

@MarkBerry Cảm ơn bạn đã tham gia. Tôi sẽ cập nhật câu trả lời của mình để bao gồm phiên bản đó. –

+1

Theo tài liệu, người ta cũng có thể sử dụng url nội dung ('yourimage.png'), vì vậy nó sẽ xuất hiện phần bổ sung 'hình ảnh' không hoạt động - chỉ cần thay đổi quy ước đặt tên bắt buộc bằng cú pháp-fiddlers. Chắc chắn, tôi có thể chạy một kịch bản awk trên tất cả hàng ngàn dòng css trong tất cả các dự án tôi làm việc trên, nhưng điều này có thể sẽ thất bại trong một số tình huống không lường trước được và phá vỡ mọi thứ. Bất cứ ai biết về một viên ngọc khôi phục chức năng ban đầu của việc này và những thay đổi cú pháp-cú pháp tương tự? – JosephK

5

bạn phải chạy lệnh này

rake assets:precompile 
7

Có thể giúp ai đó, tôi đã thử tất cả các câu trả lời và quên điều cơ bản nhất cần làm. Xoá bộ nhớ cache của trình duyệt, một khi thực hiện tôi đã tốt để đi :)

+0

Tại sao điều này thậm chí là một điều? Đề xuất của bạn đã được phát hiện, nhưng tôi thấy thật kỳ quặc khi cần thiết. – HappyCoder86

0

tôi vẫn tiếp tục sử dụng các đường ống dẫn tài sản, nhưng đã phải thay đổi url cứng mã hoá của mà tôi sử dụng như sau (đối với môi trường phát triển của tôi):

tôi cập nhật /config/application.rb tôi để sử dụng các đường ống dẫn tài sản:

config.assets.enabled = true 

tôi đã thay đổi tất cả các hình ảnh url của tôi để trỏ đến '/assets/image_without_old_image_directory_name.jpg'

ví dụ như vậy hình ảnh của tôi sử dụng để nằm trong /public/images/xxx.jpg. Tôi đã chuyển chúng đến /app/assets/images/xxx.jpg. Tôi đã thay đổi img src từ /images/xxx.jpg thành /assets/xxx.jpg

Tôi đã không cần phải thực hiện biên dịch trước tài sản và chỉ cần xóa tất cả các khía cạnh hiển thị của đường ống nội dung trong/công khai và trong/tmp, và nó chỉ hoạt động (để phát triển).

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