Sinatra app的Heroku生产问题(错误R10)

时间:2013-06-11 05:18:56

标签: ruby heroku sinatra

我遵循了heroku关于小心部署Sinatra应用程序的说明,但仍然出现了问题。我使用sinatra-base和sinatra-partial如果有任何区别的话。我在gemfile和myapp.rb

中声明了所有宝石

Gist of my files

这是我在heroku日志中看到的

2013-06-11T05:09:28.982664+00:00 app[web.1]:    from myapp.rb:49:in `<class:MyApp>'
2013-06-11T05:09:29.148291+00:00 app[web.1]: [2013-06-11 05:09:29] INFO  WEBrick 1.3.1
2013-06-11T05:09:29.148613+00:00 app[web.1]: == Sinatra/1.4.0 has taken the stage on 4567 for production with backup from WEBrick
2013-06-11T05:09:29.148759+00:00 app[web.1]: [2013-06-11 05:09:29] INFO  WEBrick::HTTPServer#start: pid=2 port=4567
2013-06-11T05:09:29.148291+00:00 app[web.1]: [2013-06-11 05:09:29] INFO  ruby 1.9.2 (2011-07-09) [x86_64-linux]
2013-06-11T05:10:26.570140+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2013-06-11T05:10:26.570414+00:00 heroku[web.1]: Stopping process with SIGKILL
2013-06-11T05:10:28.018692+00:00 heroku[web.1]: Process exited with status 137
2013-06-11T05:10:28.033080+00:00 heroku[web.1]: State changed from starting to crashed

在对Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch错误进行更多研究之后,可能是因为宝石需要很长时间才能加载。但是,我只使用这些宝石,所以我不知道它为什么会超时。在本地,启动我的应用程序大约需要1秒钟。

1 个答案:

答案 0 :(得分:3)

Heroku动态分配端口。当您在myapp.rb的第85-97行中调用run!方法时,您正在端口4567上启动应用程序。您应该能够删除这三行并使用config.ru启动您的应用程序。

你将heroku gem添加到你的Gemfile中,你可以删除Procfile。否则你应该通过备份启动应用程序:

web: bundle exec rackup config.ru -p $PORT

您还可以在Gemfile中添加'thin'并使用像这样的Procfile

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT