Tôi đang trong quá trình cập nhật ứng dụng Rails 3 để sử dụng Rails 3.1 và là một phần trong đó, đang sử dụng đường dẫn nội dung mới. Cho đến nay, tôi đã có tất cả mọi thứ làm việc ngoài một vấn đề khá khó chịu mà tôi không thể giải quyết.Tài sản biên dịch trước bị hỏng trong Rails 3.1 khi triển khai vào một URI phụ
Ứng dụng và tất cả các tài sản của nó hoạt động tốt trong phát triển, nhưng trong quá trình sản xuất, nó được triển khai tới một URI phụ sử dụng Hành khách (http://the-host/sub-uri/
). Vấn đề với điều này là các tài sản được biên dịch trước trong quá trình triển khai và một trong các tệp CSS của tôi (tốt, đó là một tệp .css.scss
) đang sử dụng trình trợ giúp image-url
từ đá quý sass-rails
. Kể từ khi trong quá trình tiền biên dịch, các đường dẫn được mã hóa cứng vào file CSS biên dịch sẵn, tiểu uri không lấy tài khoản của:
Trong file .css.scss
tôi:
body { background-image: image-url("bg.png"); }
Kết quả trong biên soạn application-<md5-hash-here>.css
file:
body { background-image: url(/assets/bg.png); }
gì nó phải được để làm cho nó hoạt động chính xác:
body { background-image: url(/sub-uri/assets/bg.png); }
Kịch bản này chỉ hỏi quá nhiều? Nếu vậy, tôi sẽ phải chuyển về cách không có đường ống nội dung cũ và chỉ phục vụ hình ảnh và CSS của tôi từ public
. Tuy nhiên nó có vẻ giống như một cái gì đó nên đã được suy nghĩ và giải quyết ...? Tôi có thiếu giải pháp không?
Sửa 1: tôi nên lưu ý rằng việc sử dụng các erb solution thay vì mang lại kết quả tương tự, như người ta mong đợi.
Chỉnh sửa 2: để đáp lại lời nhận xét Benoit Garret của
Không, vấn đề không liên quan đến các config.assets.prefix
. Tôi đã thử thiết lập điều đó (thành /sub-uri/assets
thay vì mặc định là /assets
) nhưng hóa ra đó là điều sai phải làm - có vẻ như cài đặt này đã liên quan đến gốc của ứng dụng Rails chứ không phải máy chủ. Loại bỏ (và do đó trở về mặc định) đã cố định tất cả các vấn đề lạ gây ra (và có rất nhiều, tất cả các tài sản kết thúc trong /sub-uri/sub-uri/assets
- đó là tất cả rất lạ). Vấn đề duy nhất là người trợ giúp image-url
và bạn bè không chọn URI phụ khi chúng được biên dịch trước. Không cần phải nói, điều này là hợp lý vì khi nó được biên dịch trước, nó không thể biết rằng khi nó đang chạy dưới Hành khách, nó sẽ được cấu hình theo cách này. Câu hỏi của tôi là làm thế nào để thông báo cho nó về điều này và do đó kết thúc với các đường dẫn chính xác trong kết quả biên dịch trước. Nếu thực sự nó có thể được thực hiện.
Giải pháp khắc phục hiện tại của tôi là tham chiếu iamge trong CSS như sau: url(../images/bg.png)
và đặt nó vào vị trí không được pipelined public/images
. Rất lý tưởng vì nó không được hưởng lợi từ dấu vân tay và mọi thứ mà đường ống cung cấp.
Bạn đã thử cái này chưa? http://stackoverflow.com/questions/7295744/how-to-deploy-rails-3-1-app-in-a-subdirectory –
Bản thân ứng dụng được triển khai tốt (nó sử dụng phương thức RailsBaseURI đó vì nó là hành khách đề nghị tài liệu). Tất cả các tài sản được liên kết đến từ bên trong ứng dụng đang chạy như hình ảnh bằng cách sử dụng 'image_tag' và như vậy là tốt. vấn đề duy nhất là các hình ảnh được nhắc đến từ bên trong CSS - nó không biết về URI phụ tại thời điểm biên dịch trước các tài sản. Đó là điều mà tôi cần một giải pháp nếu có. –
Vì vậy, vấn đề của bạn là helper 'image-uri' không nhận' config.assets.prefix'? –