Heroku上与Ruby应用程序的绑定端口失败

时间:2019-05-06 18:50:40

标签: ruby-on-rails ruby docker heroku

我想在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秒所致。

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

2 个答案:

答案 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