我想在Heroku上将Ruby on Rails应用程序托管为Docker容器。但是部署时似乎与端口绑定有关。
我通过Docker在本地和Heroku上成功托管了一个简单的Ruby应用程序,然后转到了实际应用程序。该应用程序可在localhost上正常运行,但遇到端口绑定问题:
错误R10(引导超时)-> Web进程在启动后60秒内未能绑定到$ PORT
d = ('/admin display-config | match context all %s | match "Loopback" invert-match | match "loopback" invert-match' %v)
child.sendline(d)
child.expect(b,timeout=None)
fout1 = child.before
print fout1
child.sendline(x)#timeout=None
if re.findall('vprn.+? ', fout1):
vprn = re.findall('vprn.+? ', fout1)
vprn = set([i.split()[1] for i in vprn])
vprn = list(vprn)
for vprns in vprn:
j = ("/show service id %s base" %vprns)
child.sendline(j)
child.expect(b)
fout2 = child.before
print fout2
names = re.findall('[^:]*', fout2)
print names
我尝试将Heroku上的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
变量配置为3000。我还尝试使用$PORT
运行该应用程序。我也尝试没有任何端口。
我认为这可能是由于应用程序的大小以及要加载的多个宝石可能超过60秒所致。
我希望该应用绑定到要访问的端口。但是,它崩溃了。
答案 0 :(得分:0)
我尝试在Heroku上将
$PORT
变量配置为3000
这不是PORT
环境变量的工作方式。您无需将其设置为要使用的值; Heroku 对其进行设置,并且 you 必须绑定到它给您的端口上。
例如,如果您使用的是Puma,则可能include the -p
option in your Procfile
:
web: bundle exec puma -p ${PORT:-3000}
在这里,我们使用$PORT
给定的值,如果未设置(例如在您的开发计算机上),则会回退到3000
。
答案 1 :(得分:0)
就我而言,我必须使用其他启动脚本。
我用CMD ["bundle", "exec", "puma" ,"-C" ,"config/puma.rb"]
代替了rails server -b 0.0.0.0