2011-11-01 30 views
13

Tôi đang chạy ứng dụng 3.1 trên ngăn xếp Heroku Cedar hỗ trợ đường dẫn nội dung. Heroku lists 3 ways để biên dịch nội dungỨng dụng đường ray Heroku 3.1 - biên dịch nội dung cục bộ so với biên dịch nội dung trong quá trình biên dịch sên

  1. Biên soạn nội dung cục bộ.
  2. Biên dịch nội dung trong quá trình biên dịch sên.
  3. Biên dịch nội dung trong thời gian chạy.

Rõ ràng # 3 là xấu cho hiệu suất và tài liệu Heroku cũng khuyên bạn nên chống lại nó. Nhưng tôi không chắc cái nào tốt hơn giữa # 1 và # 2.

# 1 yêu cầu bạn chạy rake assets:precompile và bao gồm thư mục public/assets trong git. Slug của bạn sẽ lớn hơn nhưng tôi cho rằng thời gian chết để triển khai một trang web sẽ thấp hơn. Nhưng kích thước slug lớn hơn có nghĩa là khởi động ứng dụng chậm hơn vì vậy có thể đó là một rửa.

# 2 sẽ mất nhiều thời gian hơn để triển khai các bản cập nhật do biên dịch trước được thực hiện ở phía Heroku. Tuy nhiên, bạn sẽ có một con sên nhỏ hơn và ít có khả năng quản lý/ghi nhớ hơn.

Câu hỏi của tôi là - tùy chọn nào (# 1 hoặC# 2) là lựa chọn tốt nhất cho sản xuất và tại sao?

Cho đến nay, nó trông giống như tùy chọn # 2 nhưng tôi muốn đảm bảo rằng tôi không nhìn thấy gì đó.

+0

http://devcenter.heroku.com/articles/cdn-asset-host-rails31 cũng là một lựa chọn tốt - mặc dù nó đồng bộ tài sản với S3 từ ứng dụng của bạn trên Heroku để chúng vẫn hiện diện trong sên của bạn không được phục vụ từ Heroku. –

+0

cũng đôi khi # 2 không phải lúc nào cũng là một lựa chọn. Heroku sẽ luôn luôn cố gắng biên dịch chúng trong quá trình biên dịch slug đầu tiên và nếu sau đó thất bại sau đó trong thời gian chạy. –

Trả lời

7

tôi giải quyết một số vấn đề và một Gotcha lớn trong câu hỏi của tôi ở đây: Rails 3.1.1 asset pipeline Heroku caching gotcha

tôi muốn # 2 nếu nó làm việc cho tôi vì vậy tôi không cần phải checkin tài sản biên soạn mà chỉ bloats git kho.

Biên dịch nội dung trong quá trình biên dịch sên sẽ không dẫn đến thêm bất kỳ thời gian chết nào vì ứng dụng hiện tại của bạn sẽ ở lại cho đến khi biên dịch hoàn chỉnh nên không phải lo lắng.

Lời khuyên của tôi sẽ là # 2 nếu bạn có thể làm cho nó hoạt động cho bạn. Nếu bạn kết thúc lên w/# 1 thì hãy thực hành tốt nhất sẽ là git rm -r công khai/tài sản trước khi rake tài sản: biên dịch trước để đảm bảo không còn trôi dạt.

+0

Cập nhật: tùy chọn # 2 hiện hoạt động cho tôi sau khi nâng cấp lên Devise 1.5.0 - sạch hơn nhiều so với việc kiểm tra tài sản. –

+0

Nếu bạn không có lựa chọn nào khác ngoài # 1, bạn nên tạo một tác vụ cào để triển khai cho Heroku. Nó sẽ 1) loại bỏ pubic/asset 2) biên dịch trước tài sản 3) checkin tài sản mới được biên dịch để git 4) đẩy vào heroku. – Dty

+0

# 2 cũng là lựa chọn ưa thích của tôi - nhưng tôi luôn bị nhầm lẫn vì sao dường như mất quá nhiều thời gian để hoàn thành. Nó chỉ nên được cat'ing một chục tập tin hoặc như vậy và gziping. Có lẽ việc khai thác mất nhiều thời gian nhất để kiểm tra cú pháp, v.v ...? Bất kỳ thông tin chi tiết nào được đánh giá cao. –

2

Nó có thể phụ thuộc vào kích thước của thư mục tài sản của bạn, (và có thể là một giải pháp lâu dài sẽ đưa những tài sản bên ngoài ứng dụng và lưu trữ chúng trên S3 hoặc tương tự.)

Nếu không, tôi giả # 1 sẽ là sản phẩm tốt nhất về sản xuất vì mọi nội dung đều có thể được sử dụng và lưu trữ ngay lập tức.

Tôi đang đọc phần tài liệu của Heroku trên assets và dường như họ chỉ ra rằng # 2 sẽ được sử dụng chỉ trong trường hợp bạn đã quên tự làm điều đó, để thuận tiện. Bạn sẽ không nhận được một con sên nhỏ, vì kết quả chuẩn bị tài sản sẽ được đưa vào sên để tự triển khai.

+0

rất thú vị rằng kích thước sên không nhỏ hơn. Cảm ơn thông tin đó. Nhưng tại sao bộ nhớ đệm trong # 1 lại khác với # 2? – Dty

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