2011-09-03 5 views
5

Tôi vừa nâng cấp ứng dụng của mình trên Heroku từ Rails 3.0 lên 3.1 và tôi đang cố gắng làm cho đường ống nội dung hoạt động. Vấn đề chính là tôi có thể đọc từ Heroku đăng nhập các loại sau đây của dòng, cho mỗi tài sản:Tài sản đường ống khi cập nhật lên Rails 3.1 trên Heroku

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss 

Nếu tôi hiểu các đường ống dẫn một cách chính xác, điều này không nên "bỏ lỡ" cho mọi yêu cầu tôi thực hiện từ một trình duyệt, nhưng nó sẽ được tìm thấy trong bộ nhớ cache.

Đọc các tài liệu Heroku bạn có thể tìm thấy lời giải thích này:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code. 

Nhưng làm thế nào nên rằng "tài sản: tiền biên dịch" nhiệm vụ được? Tôi đã thử xây dựng một dự án với đường ray 3.1 từ đầu để cố gắng tìm ra, nhưng không có nhiệm vụ như vậy trong một dự án trần. Hay tôi đang thiếu một cái gì đó? Làm thế nào tôi có thể làm cho rằng các tài sản được tìm thấy trong bộ nhớ cache? Có lẽ chỉ là một vấn đề với cấu hình.

Đây là những lựa chọn của tập tin cấu hình sản xuất của tôi:

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an asset isn't compiled 

application.rb của tôi có dòng này:

config.assets.enabled = true 

Cảm ơn rất nhiều sự giúp đỡ của bạn!

+0

Tôi biên dịch nội dung trực tiếp trên heroku, không gây ô nhiễm kho lưu trữ cục bộ của tôi với nội dung bị khiếu nại. Sử dụng lệnh: heroku chạy rake tài sản: biên dịch trước –

Trả lời

4

tôi đã tự hỏi điều tương tự, nhưng đây là một mẹo để giúp tìm ra nếu tài sản của bạn là live-biên dịch hay không

  1. chạy rake assets:precompile địa phương
  2. thực hiện một số thay đổi để css của bạn nhưng không chạy lại nhiệm vụ cào
  3. git add, cam kết và push to Heroku

Nếu những thay đổi bạn đã thực hiện ở bước 2 hiển thị trên ông roku, sau đó bạn biết ứng dụng của mình đang biên dịch trực tiếp

Đừng quên rằng bạn hiện đang phụ trách bộ nhớ đệm http vì Varnish không còn được bao gồm trong celadon nữa, vì vậy bạn cần thiết lập bộ nhớ cache và tự ghi nhớ:

Nhưng yeah, Tôi thấy điều này khó hiểu quá

+0

Cảm ơn bạn đã trả lời, nó có đầy đủ các thông tin quan trọng. – alvatar

1

Bạn có thể thử với config.serve_static_assets thiết lập để true

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

thêm vào tập tin config/environments/production.rb của bạn?

Khi bạn đẩy mã của mình vào Heroku, bạn sẽ thấy phần biên dịch trước được công bố bởi trình biên dịch slug AFAICT.

+0

"-----> Chuẩn bị ứng dụng cho Rails tài sản đường ống" xuất hiện, nhưng như vậy đã làm trước đây. Vẫn nhận được bộ nhớ cache mặc dù ... – alvatar

+0

Không nên sử dụng chỉ thị ngnix thay thế? 'config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'' – tibbon

1

Đảm bảo bạn đang ở trên Heroku "Cedar" stack. Sau đó Heroku will automatically precompile your assets during slug compilation.

Lưu ý: Tôi vẫn nhận được "bộ nhớ cache" quá, nhưng tôi không nghĩ điều đó thực sự đúng vì ứng dụng của bạn sẽ không hoạt động nếu nội dung của bạn không được biên soạn.

+3

có, tôi có ngăn xếp Cedar. Nếu bạn đã kích hoạt "biên dịch trực tiếp", nó sẽ biên dịch nó mỗi khi có một bộ nhớ cache bị thiếu. Trên thực tế, nếu tôi tắt tùy chọn này (với 'config.assets.compile = true') thì nó không hoạt động chút nào. – alvatar

5

Ngoài ra, hãy nhìn vào http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

Đối precompiles tài sản nhanh hơn, bạn có thể tải phần ứng dụng của bạn bằng cách thiết lập config.assets.initialize_on_precompile để sai trong config/application.rb, mặc dù trong trường hợp đó, các mẫu không thể thấy đối tượng hoặc phương pháp ứng dụng. Heroku yêu cầu điều này là false