【问题标题】:Failed binding port to Ruby application on HerokuHeroku 上的 Ruby 应用程序绑定端口失败
【发布时间】:2019-05-09 18:18:54
【问题描述】:

我想在 Heroku 上托管一个 Ruby on Rails 应用程序作为 Docker 容器。但是部署时似乎存在端口绑定问题。

我通过 Docker 在本地和 Heroku 上成功托管了一个简单的 Ruby 应用程序,然后我转移到了实际应用程序。该应用程序在 localhost 上运行良好,但出现端口绑定问题:

错误 R10(启动超时)-> Web 进程在启动后 60 秒内未能绑定到 $PORT

2019-05-06T18:23:13.608790+00:00 app[web.1]: Digest::Digest is deprecated; use Digest
2019-05-06T18:23:15.826137+00:00 app[web.1]: Puma 2.7.1 starting...
2019-05-06T18:23:15.826185+00:00 app[web.1]: * Min threads: 0, max threads: 16
2019-05-06T18:23:15.826188+00:00 app[web.1]: * Environment: production
2019-05-06T18:23:15.826189+00:00 app[web.1]: * Listening on tcp://0.0.0.0:3000
2019-05-06T18:24:03.338792+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2019-05-06T18:24:03.338920+00:00 heroku[web.1]: Stopping process with SIGKILL
2019-05-06T18:24:03.468261+00:00 heroku[web.1]: State changed from starting to crashed
2019-05-06T18:24:03.451392+00:00 heroku[web.1]: Process exited with status 137
2019-05-06T18:24:05.407120+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=floating-spire-20546.herokuapp.com request_id=9362ea3c-bcb6-476a-a5d4-76c82cd443a3 fwd="5.151.93.202" dyno= connect= service= status=503 bytes= protocol=https

我尝试将 Heroku 上的 $PORT 变量配置为 3000。我还尝试使用 rails server -b 0.0.0.0 运行应用程序。我也试过没有任何端口。

我认为这可能是由于应用程序的大小和要加载的多个 gem 可能超过 60 秒。

我希望应用绑定到要访问的端口。但是,它崩溃了。

【问题讨论】:

标签: ruby-on-rails ruby docker heroku


【解决方案1】:

我尝试将 Heroku 上的 $PORT 变量配置为 3000

PORT 环境变量不是这样工作的。您无法将其设置为您要使用的值; Heroku 设置它, 必须绑定到它给你的端口。

例如,如果您使用 Puma,您可能会include the -p option in your Procfile

web: bundle exec puma -p ${PORT:-3000}

这里我们使用$PORT 给出的值,如果未设置(例如在您的开发机器上),则回退到3000

【讨论】:

  • 谢谢,这是一个很好的观点。但是,我的问题是因为应用程序需要花费时间来构建依赖项和启动。它超过了 Heroku 允许端口绑定的时间(60 秒),所以我不得不联系团队以请求更多的应用程序启动时间 - devcenter.heroku.com/articles/error-codes#r10-boot-timeout
  • 为什么您的应用程序在启动时会构建依赖项?通常这将在构建时完成。无论如何,很高兴您找到了解决方案。我很高兴我的回答有所帮助。
【解决方案2】:

就我而言,我不得不使用不同的启动脚本。 我用CMD ["bundle", "exec", "puma" ,"-C" ,"config/puma.rb"] 代替rails server -b 0.0.0.0

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多