Heroku 需要 40 分钟来执行来自 Twilio 的发布请求

Posted

技术标签:

【中文标题】Heroku 需要 40 分钟来执行来自 Twilio 的发布请求【英文标题】:Heroku taking 40 min to execute a post request from Twilio 【发布时间】:2016-06-25 21:29:25 【问题描述】:

我正在构建一个简单的应用程序,用户可以在其中向某个号码发送短信并将该消息保存在我的数据库中。这是一个使用 Twilio API 作为 SMS 服务的 Rails 应用程序,部署在 Heroku 上。

根据 Heroku 日志,它正在接收来自 Twilio 的 post 请求,但它没有保存到数据库中。这个问题很难解决,因为从发布请求到简单地将消息记录到控制台之间需要 45 分钟。

处理请求的路由:

class MessagesController < ActionController::Base

def index
 puts params["Body"]
 @text = Text.create(message: params["Body"], message_date: Date.now)
 @user = User.first
 @user.texts.push(@text)
 end
end

Heroku 说 post 请求有 500 错误:

2016-03-09T22:45:29.713143+00:00 heroku[router]: at=info method=POST path="/received" host=app.herokuapp.com request_id=0ec8e694-2b0d-4ac9 -9312-d17182f186bd fwd="54.209.0.88" dyno=web.1 connect=43ms service=31ms status=500 bytes=1754

但是服务器在大约 45 分钟内没有响应:

2016-03-09T23:20:37.332477+00:00 heroku[web.1]:空闲

2016-03-09T23:20:37.333120+00:00 heroku[web.1]: 状态从上升到下降

2016-03-09T23:20:43.313455+00:00 heroku[web.1]:使用 SIGTERM 停止所有进程

2016-03-09T23:20:44.849078+00:00 app[web.1]: [2016-03-09 23:20:44] 致命信号异常:SIGTERM

2016-03-09T23:20:44.849090+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/webrick/server.rb:174:在“选择”中

2016-03-09T23:20:44.849092+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/webrick/server.rb:174:在 `block in start' 中

2016-03-09T23:20:44.849093+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/webrick/server.rb:32:在“开始”中

2016-03-09T23:20:44.849093+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/webrick/server.rb:162:在“开始”中

2016-03-09T23:20:44.849094+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/handler/ webrick.rb:34:在“运行”中

2016-03-09T23:20:44.849095+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/rack-1.6.4/lib/rack/server. rb:286:in `开始'

2016-03-09T23:20:44.849096+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/ server.rb:80:in `start'

2016-03-09T23:20:44.849097+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/ commands_tasks.rb:80:in `block in server'

2016-03-09T23:20:44.849098+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/ commands_tasks.rb:75:in `tap'

2016-03-09T23:20:44.849098+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/ commands_tasks.rb:75:in `server'

2016-03-09T23:20:44.849099+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/ commands_tasks.rb:39:in `run_command!'

2016-03-09T23:20:44.849100+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands。 rb:17:in `'

2016-03-09T23:20:44.849101+00:00 app[web.1]: bin/rails:9:in `require'

2016-03-09T23:20:44.849102+00:00 app[web.1]: bin/rails:9:in `'

2016-03-09T23:20:44.852841+00:00 app[web.1]: [2016-03-09 23:20:44] INFO 即将关闭 ...

2016-03-09T23:20:44.852937+00:00 app[web.1]: [2016-03-09 23:20:44] INFO WEBrick::HTTPServer#start done。

2016-03-09T23:20:45.017655+00:00 app[web.1]: => 正在启动 WEBrick

2016-03-09T23:20:45.017668+00:00 app[web.1]: => Rails 4.2.5 应用程序在 http://0.0.0.0:19472 开始生产

2016-03-09T23:20:45.017671+00:00 app[web.1]: => Ctrl-C 关闭服务器

2016-03-09T23:20:45.017670+00:00 app[web.1]: => 运行 rails server -h 以获得更多启动选项

2016-03-09T23:20:45.017675+00:00 app[web.1]:这是一个测试

2016-03-09T23:20:45.017676+00:00 app[web.1]:退出

2016-03-09T23:20:45.983638+00:00 heroku[web.1]:进程以状态 143 退出

此外,Twilio 给出 11200 HTTP 检索失败,因此我们不确定它最终如何在 40 分钟后将消息记录到我们的控制台。

关于问题可能是什么的任何想法?这是 heroku 错误、twilio 错误还是我们可以自行修复的问题?

谢谢!

【问题讨论】:

Heroku 实际上在 74ms (connect=43ms service=31ms) 内响应错误。然后它在 35 分钟内什么都不做,然后它进入睡眠状态(因为你使用的是免费的测功机)。 【参考方案1】:

原来我只是打错字--

class MessagesController &lt; ActionController::Base

应该是:

class MessagesController &lt; ApplicationController

【讨论】:

【参考方案2】:

我的 Heroku 服务器不久前就这样做了,问题不是首先运行 heroku run rake db:migrate。我做到了,并且在像这样长时间闲置之后它对我有用。

如果您在数据库中还没有很多信息,您可能需要重置它并重试,这个 SO 线程帮助了我:How to empty DB in heroku

【讨论】:

以上是关于Heroku 需要 40 分钟来执行来自 Twilio 的发布请求的主要内容,如果未能解决你的问题,请参考以下文章

错误 R10(引导超时)Heroku 与 python 脚本

在nodejs中重新启动heroku dyno

防止heroku中不需要的日志

从 heroku 部署后,Discord bot 只能工作一分钟左右

Heroku/Celery:一名工人同时执行任务?

自动执行 rake 任务以在 heroku 上启动时运行?