我在 Heroku 上有一个带有 Unicorn 服务器的 Rails 网站。我偶尔会收到类似以下错误的通知:
ActionView::Template::Error: execution expired
(in /app/app/assets/javascripts/application.js)
这是我的 application.js 文件:
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree
//= require jquery.qtip.js
错误日志没有清楚地显示导致此类错误的原因。例如,最近的日志如下所示。什么可能导致此类错误,或者我应该如何诊断它们?
unicorn 配置:
# config/unicorn.rb
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 15
preload_app true
#...
捕捉超时:
#timeout.rb
Rack::Timeout.timeout = 13
日志:
app/web.2:开始获取“/articles/20”...
heroku/web.1:骑自行车
heroku/web.1:使用 SIGTERM 停止所有进程
app/web.1:Unicorn worker 拦截 TERM 并且什么都不做。等待 master 发送 QUIT Unicorn worker 拦截 TERM 并且什么都不做。等待 master 发送 QUIT
app/web.1:Unicorn worker 拦截 TERM 并且什么都不做。等待 master 发送 QUIT
app/web.1:Unicorn master 拦截 TERM 并发送 QUIT 代替
heroku/router: at=info method=GET path=/articles/20 host=... dyno=web.2 connect=1ms service=79ms status=200 bytes=8123
app/web.1: I, INFO -- : 收获#worker=0
app/web.1: I, INFO -- : 收获#worker=2
app/web.1: I, INFO -- : 收获#worker=1
app/web.1: I, INFO -- : master 完成
heroku/web.1:错误 R12(退出超时)-> 至少有一个进程未能在 SIGTERM 的 10 秒内退出
heroku/web.1:使用 SIGKILL 停止剩余进程
heroku/web.1:进程退出,状态为 137
heroku/web.1:状态从上变为下
heroku/web.1:状态从下变为开始
heroku/web.1:使用命令`bundle exec unicorn -p 14131 -c ./config/unicorn.rb` 启动进程
最佳答案
如果这实际上是由渲染 application.js 引起的,您可能设法关闭了 Assets 预编译,否则该文件将被预编译并且只是一个几乎不会超时的文件。
检查 Assets 预编译并重新启用它,如果它实际上被禁用。
如果不是这种情况,文件可能非常大,您应该重新考虑是否实际使用了 javascripts Assets 文件夹中的所有内容。
关于ruby-on-rails - 如何修复 Rails 中的执行过期错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19504452/