2012-03-13 39 views
5

Tôi đã có ứng dụng Rails 3 khá lớn, được nâng cấp 2.3, đủ béo để không vượt qua 60 giây khởi động tại Heroku và do đó nó bị lỗi. Tôi đã thực hiện một loạt các công việc để giảm thiểu thời gian tải trong Gems và initializers, nhưng có một số quá trình ngẫu nhiên đó là đốt cháy thời gian và tôi không chính xác chắc chắn nó là gì. Tôi có thể sử dụng một bộ mắt khác.Thời gian chờ khởi động ứng dụng Heroku

Đây là GIST với config.ru, application.rb và environment.rb và Gemfile.

https://gist.github.com/2026140

Bất kỳ suy nghĩ sẽ được đánh giá rất nhiều.

Trả lời

7

Điều này là do, ít nhất trong trường hợp của tôi, với hai điều: 1) rất nhiều đá quý và 2) Mongo mất một thời gian dài để khởi tạo (cơ sở dữ liệu nặng gánh nặng).

Để sửa lỗi đá quý, trên trình phát cục bộ của tôi, tôi đã vá gói Kernel # yêu cầu câu lệnh để tôi có thể thấy được tải dài nhất. Sau đó, tôi đã cố gắng loại bỏ chúng. Chặn điều đó, tôi đặt chúng thành: require => false và yêu cầu chúng theo cách thủ công khi cần.

Thứ hai, tôi khỉ vá Mongoid để nó không cố gắng kết nối với cơ sở dữ liệu khi ứng dụng đang bắt đầu. Điều này đã giúp đáng kể với thời gian khởi động chậm (bị loại bỏ hơn 10 giây).

+3

Cuối cùng, chúng tôi đã phải viết một proxy ở phía trước liên kết với cổng cho heroku .. sau đó, chúng tôi khởi động ứng dụng phía sau nó. – Williamf

+0

bạn có thể cung cấp một số gợi ý cho "proxy ở phía trước liên kết với cổng cho heroku" lừa? Tôi có cùng một vấn đề và giảm thời gian khởi động ứng dụng không phải là tầm thường. – pmc255

+1

Có, bạn có nhớ chia sẻ các bản cập nhật mongoid bạn đã thực hiện không? –

3

Đá quý heroku-forward sẽ giúp bạn vượt qua thời gian chờ Heroku 60 giây.

5

Thời gian chờ khởi động của Heroku cũng làm tôi hơi khó chịu. Tôi đọc một số bài đăng trên blog về cách tìm hiểu và kết thúc tự động hóa một số giải pháp thành một viên ngọc.

Để giảm thời gian khởi động khi triển khai, bạn có thể cắt đá quý được nạp lúc khởi động (điều này không có nghĩa là bạn phải cắt chúng khỏi ứng dụng, chỉ cần thời gian khởi động).

gem_bench đánh giá đá quý nào có thể không phải là cần khi khởi động.

Tôi có một ứng dụng với khoảng 250 viên đá quý và có thể thêm: require => false vào khoảng 60 trong số đó, với hiệu ứng ấn tượng.

https://github.com/acquaintable/gem_bench

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của mã nguồn mở này. Tôi đã viết đá quý để giúp bản thân mình giải quyết vấn đề chính xác này: thời gian chờ 60 giây trên Heroku.

+1

Đá quý tuyệt vời, cảm ơn bạn đã viết và đăng câu trả lời này! – rmcsharry

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