2013-06-01 32 views
5

Ví dụ, trong ứng dụng Rails của tôi, tôi có một cái gì đó như:Rails hình ảnh và tài sản không được nạp đúng

.wax_seal { 
    background: url("wax-seal-small.png"); 
    display: block; 
    height: 100px; 
    margin: 0 auto; 
    width: 92px; 
} 

.wax_seal:active { 
    background: url('wax-seal-small-broken.png'); 
} 

Và trong tập tin config/environments/production.rb tôi:

# Disable Rails's static asset server (Apache or nginx will already do this). 
config.serve_static_assets = true 

tôi tự gọi biên dịch tài sản :

bundle exec rake assets:precompile 

Và các tệp được tạo bằng băm ở cuối tên:

wax-seal-small-Uuhqwduhqwdoi234983jewf.png 

Vì vậy, điều này không làm việc:

background: url("wax-seal-small.png"); 

Nhưng điều này hoạt động tốt (khi tôi tay loại nó trong Chrome):

background: url("wax-seal-small-Uuhqwduhqwdoi234983jewf.png"); 

Tôi đang bỏ lỡ bước nào? Làm thế nào tôi có thể làm cho các quy tắc CSS của tôi thêm vào băm nhỏ đó?

Thêm config.assets.compile = true vào config/environments/production.rb làm cho nó hoạt động, nhưng tôi đọc trong hướng dẫn Rails rằng đó là một thực tế xấu do số lần truy cập hiệu suất đáng kể.

+0

Tôi đang gặp sự cố tương tự này và tôi đã thử cả hai đề xuất trong 2 câu trả lời (cho đến nay) mà không có may mắn. Bạn có thể chia sẻ toàn bộ tệp 'production.rb' của mình để tôi có thể so sánh với tôi không? Cảm ơn. –

Trả lời

5

Tôi thấy điều này trong edgerails tài liệu: http://edgeguides.rubyonrails.org/asset_pipeline.html#css-and-sass

2.3.2 CSS và Sass

Khi sử dụng các đường ống dẫn tài sản, đường dẫn đến tài sản phải được viết lại và sass-ray cung cấp -URL và những người trợ giúp -path (được gạch nối trong Sass, nhấn mạnh trong Ruby) cho các lớp nội dung sau: hình ảnh, phông chữ, video, âm thanh, JavaScript và biểu định kiểu.

  • image-url("rails.png") becomes url(/assets/rails.png)
  • image-path("rails.png") becomes "/assets/rails.png"

Các hình thức chung chung hơn cũng có thể được sử dụng nhưng con đường tài sản và lớp cả phải được xác định:

  • asset-url("rails.png", image) becomes url(/assets/rails.png)
  • asset-path("rails.png", image) becomes "/assets/rails.png"
+1

Đây không phải là câu trả lời? Câu hỏi có vẻ là "tại sao dấu vân tay không hoạt động". – twooster

4

Nếu bạn đang sử dụng sass hoặc ít hơn bạn có thể sử dụng background: image-url("wax-seal-small.png");

Điều đó sẽ thêm vào trước đường dẫn đến tập tin của bạn và thêm các hash xuất bộ nhớ cache.

Nếu không, hãy tham chiếu đến thư mục/asset. Ví dụ. background: url("/assets/wax-seal-small.png");

+0

Tôi đang sử dụng các tệp '.scss' mặc định. Đó có phải là con đường của kosher, đường sắt để làm điều này không? Sử dụng 'image-url' thay vì' url'? Tôi có thể tìm tài liệu chính thức về 'url hình ảnh' ở đâu? – sergserg

+0

chết tiệt tôi chỉ viết sử dụng '/ assets/....' và bạn đánh tôi quá. – pjammer

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