Подтвердить что ты не робот

Ошибка повторяющихся рельсов на Heroku/Unicorn - "исполнение истекло", ActionView:: Template:: Error

Мой вопрос похож на следующий, но происходит в несколько разных обстоятельствах.

Rails: выполнение истекло в time_zone_select

Моя настройка:

  • Rails 3.2.13
  • Единорог 4.6.2
  • Mongoid 3.0.22
  • Мопед 1.4.2

Запуск на Кероке Героку. MongoDB находится в MongoLab.

Ошибки появляются в партиях и часто решаются перезагрузкой процесса Heroku. Первый, как правило, следующий:

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'

Ниже показан верхний бит трассировки стека. Приятно добавить больше, если это необходимо!

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'

Rack:: Timeout установлен на 10 секунд (я считаю, что это было предложено одним из учебников по кешированию, которые я читал) - если ответ заключается в увеличении тайм-аута, это хорошо. Но я задаюсь вопросом, не является ли это проблемой медленного запроса? Поведение, похоже, указывает на то, что он просто один из процессов Unicorn, который зависает (вот почему перезагрузка ps, похоже, вылечивает его).

Любые мысли или советы будут очень оценены!

4b9b3361

Ответ 1

Я бы предположил, что это проблема с файлом или сетевой системой heroku. Метод modped read вызывает "Kernel:: select". Выберите его - это системный блокирующий вызов, который будет ждать, пока объекты IO станут читаемыми. В этом случае это порт TCP, который делает внешнее соединение с MongoLab. Могло быть любое количество причин для того, чтобы порт TCP стал нечитаемым. Проблемы с сетью и файлами приходят на ум. Я сомневаюсь, что длинный запрос, поскольку сокет будет доступен для чтения во время выполнения запроса там для выбора, не будет блокировать выполнение script. Если проблема сохранится, я бы подумал о том, чтобы отказаться от геройку или, возможно, внешней базы данных в другой сети. AWS всегда является хорошим выбором, поскольку у них очень низкая латентность между boxen (box). НТН

Ответ 2

попробуйте установить рубиновую версию в 1.9.3 в свой Gemfile, затем снова свяжите, зафиксируйте и разверните