2013-05-24 42 views
11

Câu hỏi của tôi tương tự như sau, nhưng đang xảy ra trong các trường hợp hơi khác nhau.Lỗi đường định kỳ trên Heroku/Unicorn - 'thực thi đã hết hạn', một ActionView :: Mẫu :: Lỗi

Rails: execution expired on time_zone_select

thiết lập của tôi là:

  • Rails 3.2.13
  • Unicorn 4.6.2
  • Mongoid 3.0.22
  • Moped 1.4.2

Chạy trên Heroku Cedar. MongoDB được lưu trữ tại MongoLab.

Các lỗi xảy ra theo lô và thường được giải quyết bằng quá trình khởi động lại Heroku. Người đầu tiên thường là người dưới đây:

An ActionView::Template::Error occurred in [controller]#[action]: 

execution expired 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read' 

Sau đây là bit trên cùng của dấu vết ngăn xếp. Vui lòng thêm nhiều hơn nếu cần!

vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `block in read' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:118:in `handle_socket_errors' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/sockets/connectable.rb:46:in `read' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:177:in `read_data' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:99:in `block in read' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:202:in `with_connection' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:97:in `read' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/protocol/query.rb:163:in `receive_replies' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:135:in `block in receive_replies' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `map' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/connection.rb:134:in `receive_replies' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:553:in `block (2 levels) in flush' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:129:in `ensure_connected' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:551:in `block in flush' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:566:in `logging' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:550:in `flush' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:539:in `process' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/node.rb:349:in `query' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cursor.rb:138:in `block in load_docs' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/session/context.rb:105:in `block in with_node' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cluster.rb:250:in `with_secondary' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/session/context.rb:104:in `with_node' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cursor.rb:137:in `load_docs' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/cursor.rb:25:in `each' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/query.rb:76:in `each' 
vendor/bundle/ruby/1.9.1/gems/moped-1.4.2/lib/moped/query.rb:76:in `each' 
vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.22/lib/mongoid/contextual/mongo.rb:132:in `block in each' 
vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.22/lib/mongoid/contextual/mongo.rb:556:in `selecting' 
vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.22/lib/mongoid/contextual/mongo.rb:131:in `each' 
vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.22/lib/mongoid/contextual.rb:18:in `each' 

Kệ :: Timeout được thiết lập trong 10 giây (Tôi tin rằng đã được đề xuất bởi một trong những hướng dẫn bộ nhớ đệm Tôi đọc) - nếu câu trả lời là để tăng thời gian chờ, đó là tốt. Nhưng tôi tự hỏi nếu đây không phải là một vấn đề truy vấn chậm? Hành vi này dường như chỉ ra rằng nó chỉ là một trong những quá trình Unicorn bị treo lên (đó là lý do tại sao một ps khởi động lại dường như để chữa trị nó).

Bất kỳ suy nghĩ hoặc mẹo nào sẽ được đánh giá cao!

+1

tôi nhìn thấy cùng một vấn đề/stacktrace này trên EC2 với một chồng rất giống nhau. – nont

+0

Đây không phải là một giải pháp cho vấn đề, nhưng một cách giải quyết nhẹ (và không nhất thiết phải là một giải pháp tốt) - Tôi chuyển sang Unicorn cho Puma và va chạm tới 2 Dynos trên Heroku và vấn đề đã giảm bởi một yếu tố LỚN. Nhưng nó vẫn không được giải quyết và tôi vẫn nhận được một số ít các lỗi 'Thi hành hết hạn' một ngày (mà là giảm từ một số ít một giờ). Ruột của tôi nói rằng đây là một vấn đề Mongoid/MongoLab - hoặc là một phản ứng truy vấn chậm hoặc treo các kết nối mở với một cơ sở dữ liệu không phải cục bộ. – nlh

+0

Cập nhật # 2: Nó vẫn còn xảy ra rất nhiều, ngay cả với 2 dynos & puma thay vì Unicorn. Thở dài. – nlh

Trả lời

1

Tôi cho rằng đây là vấn đề với tệp hoặc hệ thống mạng của heroku. Phương thức đọc được sửa đổi gọi là 'Kernel :: select. Chọn bản thân nó là một cuộc gọi chặn hệ thống sẽ chờ các đối tượng IO trở thành có thể đọc được. Trong trường hợp này, đó là cổng TCP tạo kết nối bên ngoài tới MongoLab. Có thể có bất kỳ lý do nào cho cổng TCP không thể đọc được. Mạng và các vấn đề tập tin đến tâm trí. Tôi nghi ngờ đó là một truy vấn chạy dài vì socket sẽ có thể đọc được trong quá trình chạy truy vấn ở đó để chọn sẽ không chặn việc thực thi tập lệnh. Nếu vấn đề vẫn tồn tại, tôi sẽ xem xét di chuyển ra khỏi heroku hoặc có lẽ một cơ sở dữ liệu bên ngoài trên một mạng khác. AWS luôn là lựa chọn tốt vì chúng có độ trễ rất thấp giữa các hộp (hộp). HTH

0

thử thiết lập phiên bản ruby ​​để 1.9.3 trong Gemfile của bạn, sau đó bó, cam kết và triển khai một lần nữa

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