Heroku容器内的PUMA服务器无法连接到端口



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

ARG PORT=3000
ENV PORT=$PORT
EXPOSE $PORT
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rails", "server"]

puma: 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时,App部署,但是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'

我的错误在哪里?有什么想法吗?

我不确定为什么您将此部分遗漏:

port        ENV['PORT']     || 3000

您无法选择自己的端口。使用Heroku给您的$PORT

对于到达此处的人们,解决方案是直接从Docker CMD调用PUMA服务器,以便应用配置文件中的所有设置。原因是在Heroku上,诸如端口之类的内容是动态添加的,因此容器图像(前面构建)将没有这些图像。以某种方式使用dockerfile中的$PORT值也无济于事。解决方案是做

CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
# or if you prefer the bash style
CMD bundle exec puma -C config/puma.rb

最新更新