2012-06-12 44 views
9

Tôi gặp sự cố sau với đường dẫn nội dung.Kiểm tra đường ống nội dung đường ray vượt qua sản xuất bị hỏng

  • Tôi có một email HTML có hình ảnh bên trong.
  • Tôi có các bài kiểm tra bao gồm trường hợp email được gửi thành công.
  • Tất cả các thử nghiệm đều vượt qua.
  • Khi chuyển sang sản xuất, tính năng yêu cầu gửi email bị hỏng do bố cục HTML đang tham chiếu đến hình ảnh không tồn tại.

Điều này rõ ràng áp dụng cho tất cả các tài sản được biên dịch trước.

Dường như với tôi đột nhiên các bài kiểm tra không còn đáng tin cậy nữa. Có cách nào để tránh tình huống này xảy ra lần nữa không?

+0

Bạn đã định cấu hình thử nghiệm env để sử dụng các tài sản biên dịch chưa? – shigeya

+0

bạn có phải là "config.assets.compile = false" không? Nếu tôi làm điều đó, tôi cần phải biên dịch trước tài sản mỗi khi tôi chạy thử nghiệm. Đây có phải là giải pháp khả thi không? –

Trả lời

12

Tôi đã tìm thấy dạng giải pháp hoàn hảo cho trường hợp của riêng tôi. Nếu bạn đặt

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

trong môi trường thử nghiệm, thử nghiệm của bạn sẽ dựa vào nội dung biên dịch trước.

Vì thật khó chịu khi biên dịch tài sản mỗi lần trong giai đoạn phát triển và thử nghiệm nhanh chóng, trong trường hợp của tôi, đủ để có cấu hình này chỉ trên CI.

Bạn có thể thiết lập một initializer gọi ci_config.rb như sau:

if ENV['CI'] 
    class YourApp::Application 
    config.assets.compile = false 
    config.assets.digest = true 
    end 
end 

Và cấu hình bạn CI để chạy tài sản cào: tiền biên dịch trên bắt đầu và cào tài sản: sạch trên kết thúc.

+1

Điều này thật tuyệt vời. Cảm ơn. – Pezholio

2

So sánh các tùy chọn cấu hình mặc định trong application.rb, production.rb và development.rb và đọc Configuring Rails Applications in Ruby on Rails Guide để tìm hiểu các tùy chọn.

tùy chọn quan trọng là, sau:

config.serve_static_assets: set này là false (mặc định sản xuất), sau đó, đường ray sẽ không phục vụ nội dung tĩnh.

config.assets.compile: liệu việc biên dịch nội dung có sử dụng đường dẫn nội dung để biên dịch hay không nếu cần.

Nếu bạn đặt trên hai tùy chọn thành false (đó là mặc định cho sản xuất), thì bạn cần phải 1) biên dịch trước và đặt nội dung tĩnh ở những vị trí thích hợp, 2) cấu hình máy chủ web (apache hoặc nginx, có thể) nội dung tĩnh khi cần.

Vì vậy, để sản xuất, bạn không chỉ cần đặt các tệp, mà còn cấu hình máy chủ web để phục vụ chúng HOẶC bạn có thể cấu hình serve_static_assets để tạo nội dung trực tuyến. Bạn có thể cần phải điều chỉnh cấu hình thử nghiệm nhưng để kiểm tra serve_static_assets là đúng trừ khi bạn thay đổi nó.

+0

cảm ơn câu trả lời, nhưng tôi đang tìm kiếm câu trả lời tập trung vào cách thiết lập một thực hành thử nghiệm để tránh trường hợp được mô tả này xảy ra lần nữa. –

+0

@shigeya, vấn đề là môi trường thử nghiệm và cấu hình môi trường sản xuất khác nhau về đường ống nội dung.Hãy tưởng tượng bạn đã thêm một tệp javascript mới vào nội dung của bạn nhưng quên bao gồm tên tệp vào mảng config.assets.precompile. Trong trường hợp này, các bài kiểm tra sẽ vượt qua (với config.assets.compile = true), nhưng việc sản xuất sẽ thất bại (có config.assets.compile = false). Vì vậy, câu hỏi không phải là về cách sử dụng đường ống tài sản, nhưng làm thế nào để làm cho môi trường sản xuất và thử nghiệm hoạt động như nhau. Câu trả lời của Fabrizio là giải pháp khả thi cho vấn đề cụ thể này. – Grimmo

+0

Cảm ơn nhận xét. Tôi nghĩ bạn đoán đúng cho trường hợp của Fabrizio. Đối với tình hình của tôi, tôi đã cấu hình mảng config.assets.precompile. vì vậy có thể là lý do khác nhau. Tôi không thể tái sản xuất được nữa, vì vậy tôi không thể xác minh. – shigeya

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