全新生成的Rails 4.2.0项目.Ran rails s,使用WEBrick表现得如预期:
vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 27158/ruby2.1
tcp6 0 0 ::1:3000 :::* LISTEN 27158/ruby2.1
Run Code Online (Sandbox Code Playgroud)
添加puma到Gemfile,运行bundle,然后rails s再次; 想出了Puma,但只绑定了tcp6接口,而不是tcp:
vagrant@web1:~$ netstat -nlpt
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 ::1:3000 :::* LISTEN 27116/ruby2.1
Run Code Online (Sandbox Code Playgroud)
有什么线索的原因?我一直在谷歌搜索没有运气.
更新:
跑步puma -b tcp://0.0.0.0:3000工作.但是,将bind指令添加到config/puma.rb并运行rails s不会:
bind 'tcp://0.0.0.0:3000'
Run Code Online (Sandbox Code Playgroud)
然而,我的配置文件中的threads/workers指令正在工作,因此我知道配置文件正在加载和使用.(甚至添加了一个put语句以确定.)
如果我只是运行puma,绑定到正确的接口,配置文件甚至会被拾取.我可能只需要运行puma而不是rails s,尽管它很烦人,必须添加到我的开发人员文档中.
UPDATE2:
我误解了.运行 …
由于某种原因,每当我暂停并恢复虚拟机时,我都无法再连接到虚拟机中托管的 docker 容器。通常,我传递-p 3000:3000到 docker 容器,以便可以访问其中的 Rails 实例,这工作正常,但是当我暂停虚拟机并稍后恢复它时,我无法再连接到端口 3000,即使它正在 docker 映像中侦听。
这导致我必须重新启动虚拟机,因为这service docker restart不会改变任何内容。
我还应该考虑其他事情来解决这个问题吗?我已经暂停/恢复带有 docker 的虚拟机有一段时间了,以前从未遇到过这个问题。
编辑
为了重现此问题,我只是恢复了虚拟机并尝试从虚拟机本身(不在 docker 映像内)连接到本地主机端口 3000,但无法连接。但是,下面显示端口 3000 正在侦听:
[root:kali:~/app]# curl http://localhost:3000
curl: (56) Recv failure: Connection reset by peer
[root:kali:~/app]# netstat -antp | grep -i listen
tcp 0 0 127.0.0.1:43050 0.0.0.0:* LISTEN 84770/autossh
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 20478/sshd
tcp6 0 0 :::3000 :::* LISTEN 32731/docker-proxy
tcp6 0 0 :::3001 :::* LISTEN …Run Code Online (Sandbox Code Playgroud)