首页 > 解决方案 > heroku 容器内的 Puma 服务器无法连接到端口

问题描述

我有一个 docker 容器:(称为Dockerfile.web,相关部分)

ARG PORT=3000
ENV PORT=$PORT

EXPOSE $PORT

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rails", "server"]

彪马:config/puma.rb

before_fork do
  ActiveRecord::Base.connection_pool.disconnect! if defined? ActiveRecord
end

on_worker_boot do
  ActiveRecord::Base.establish_connection if defined? ActiveRecord
end

preload_app!

因此,当我heroku container:push web随后运行时heroku container:release web,应用程序已部署,但 puma 服务器未启动 b/c 端口无法连接到:

Booting Puma
Rails 5.2.2 application starting in development 
Run `rails server -h` for more startup options
 Puma starting in cluster mode...
 * Version 3.12.0 (ruby 2.6.0-p0), codename: Llamas in Pajamas
 * Min threads: 5, max threads: 5
 * Environment: development
 * Process workers: 1
 * Preloading application
 * Listening on tcp://localhost:41626
 Use Ctrl-C to stop
 - Worker 0 (pid: 28) booted, phase: 0
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
Stopping process with SIGKILL

我正在关注官方指南,但我没有添加这些部分:

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

我的错误可能在哪里?有任何想法吗?

标签: ruby-on-railsherokudockerfilepumadocker-container

解决方案


我不知道你为什么把这部分遗漏了:

port        ENV['PORT']     || 3000

你不能选择自己的端口。使用$PORTHeroku 给你的。


推荐阅读