2011-10-26 29 views
10

Vấn đề tóm lại là ở chế độ phát triển chúng ta sẽ thực hiện thay đổi đối với tệp CSS hoặc JS nhưng sẽ luôn nhận được các phiên bản cũ của các tệp này. Không có gì tôi đã làm có hiệu lực. Tôi đã kiểm tra cấu hình hàng chục lần và thử mọi kết hợp các giá trị cấu hình nhưng luôn giữ được kết quả tương tự: các tập tin cũ/lưu trữ. Tôi đã thực sự chạy trong chế độ sản xuất và khởi động lại máy chủ sau mỗi thay đổi để kiểm tra.Rails 3.1.1 đường dẫn tài sản Heroku caching gotcha

Tôi đã dành cả ngày rách tóc của mình trong vấn đề này, xem hàng tá câu hỏi về lưu lượng truy cập trên đường ống nội dung nhưng không bao giờ tìm thấy câu hỏi giải quyết.

Chúng tôi sử dụng Heroku và biên dịch trước tài sản của chúng tôi bởi vì Heroku không biên dịch trước cho chúng tôi (chúng tôi cũng sử dụng sự suy nghĩ rõ ràng là nguyên nhân gây ra sự thất bại trước heroku). Vì vậy, để đẩy tài sản biên dịch của chúng tôi lên đến Heroku, chúng ta phải kiểm tra chúng trong git.

Đây là vấn đề.

Khi chúng tôi nâng cấp lên Đường ray 3.1.1 phần biên dịch tài sản tạo ra các tệp có và không có mã băm MD5 trong tên. Tôi không nghĩ nhiều về điều này và đã đi trước và kiểm tra tất cả các tập tin này để tôi có thể đẩy tới Heroku. Đôi khi sau, tôi nhận thấy sự cố với kết quả được lưu trong bộ nhớ cache trong chế độ phát triển. Các tài sản được biên dịch trước và được kiểm tra mà không có băm MD5 được phân phát từ/public/asset dưới dạng tệp tĩnh ngăn chúng tôi thấy bất kỳ thay đổi nào chúng tôi đã thực hiện trong/app/asset.

Sau khi cuối cùng nhận ra điều này tôi chạy git rm/public/assets và mọi thứ hoạt động trở lại. Vì vậy, takeaway là: Hãy cẩn thận kiểm tra tài sản vào git!

Để biến câu hỏi này thành câu hỏi: làm cách nào để người khác thực hiện việc này? Tôi có thiếu một cái gì đó hiển nhiên? Điều tôi thực sự thích là cho Heroku biên dịch trước tài sản của tôi cho tôi, nhưng nó không thành công với lỗi kết nối db mà tôi thu thập được là do nghĩ ra. Tôi đã hy vọng Rails 3.1.1 đã sửa lỗi này nhưng không.

Trả lời

12

Bạn đã xem thử số này devise issue trên github chưa? Cụ thể Jose Valim nói

Đường ray 3.1.1 cuối cùng có phương thức được gọi là config.assets.initialize_on_precompile. Nếu bạn đặt thành false, bạn sẽ tốt nhưng không cho phép bạn truy cập thông tin mô hình trên tài sản của bạn (mà bạn có thể không nên làm).

Có thể điều này sẽ cho phép tiền tố xảy ra trên Heroku cho bạn.

+0

Dty, tôi đã thử cấu hình chính xác này trước khi đăng câu hỏi này nhưng nó không hoạt động cho tôi vào thời điểm đó. Tuy nhiên, tôi chỉ thử lại lần nữa, lần này với Devise 1.4.9 và lo và nhìn nó hoạt động! Cảm ơn đề nghị đã khiến tôi thử lại lần nữa. –

+0

@ JeffCutler-Stamm vui mừng vì nó đã hoạt động! Tôi cũng đang lưu trữ một ứng dụng đường ray 3.1.1 trên heroku nhưng chưa thêm ý tưởng nào (nhưng sẽ sớm) – Dty

+1

Tôi sẽ lưu ý rằng bạn thêm ứng dụng đó vào config/application.rb –

0

Kiểm tra this guide từ Heroku. Nó phác thảo 3 cách để triển khai các ứng dụng Rails 3.1. Hai trong số này không yêu cầu biên dịch trước.

+0

Cảm ơn - nhưng không ai trong số đó phù hợp với tôi. Như tôi đã đề cập trong câu hỏi, tôi nghĩ rằng điều này là do nghĩ ra. Biên dịch trước khi biên dịch slug luôn thất bại với lỗi kết nối cơ sở dữ liệu. –

+0

bạn đang nói trình biên dịch thời gian chạy không thành công cho bạn? –

+0

có, trình biên dịch thời gian chạy không thành công vì vậy tôi bị kẹt w/biên dịch trước khi đẩy vào heroku. –

1

Lý do các tiền biên dịch tài sản không hoạt động cũng có thể, rằng vars Heroku ENV không có mặt trên sên biên soạn (triển khai) như đã nêu ở đây:

http://devcenter.heroku.com/articles/rails31_heroku_cedar

Có một (thử nghiệm) cách để cho phép các ENV vars trong triển khai vì lý do chính xác này, hãy tìm thông tin ở đây:

http://devcenter.heroku.com/articles/labs-user-env-compile

Hope this helps.

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