几个月前,我终于将 Heroku 上的 Rails 应用程序升级到了 Cedar 堆栈和 Rails 3.2。由于 Cedar 文档中建议了它,因此我使用这一行创建了一个初始化程序Rack::Timeout.timeout = 20
。很长一段时间内一切正常,但在过去的一周里,我突然开始遇到许多Timeout::Error: execution expired
错误和相关NoMethodError: undefined method 'result' for #<Timeout::Error: execution expired>
错误。
所有错误都出现在网站的普通部分,显示来自数据库的基本内容,没有任何交互操作正在进行,在正常情况下可能需要接近 20 秒才能处理。
当流量增加到我需要更多测功机的地步时会发生这种情况吗?您可以就这些神秘错误的来源提供任何建议,我们将不胜感激。
我最近对网站所做的一些更改:
- 从 Heroku Dev db 升级到 Heroku Basic db
- 在我的 gemfile 中明确定义了 Ruby 版本
ruby '1.9.2'
- 添加 IronWorker(来自 iron.io)来执行一些后台任务(仅限管理员,而不是看到错误的日常用户)我正在
config/application.rb
使用以下行进行设置:config.iw_client = IronWorkerNG::Client.new(:token => iw_conf['iron']['token'], :project_id => iw_conf['iron']['project_id'])
更新:我检查了 New Relic,Heroku Basic DB 性能存在一个极端问题。在过去的 24 小时内,数据库响应时间一直徘徊在 1000 毫秒到 6000 毫秒的高端。这是我的错误,还是 Heroku 的问题?