在将我们团队的rails应用程序升级到4.2之后,正如release note所提到的,rails server
绑定到的默认ip从0.0.0.0
更改为localhost
。
我们使用Vagrant进行开发,并希望可以从主机上的浏览器直接访问开发服务器。
从现在开始,我不想知道是否有更好的解决方案,这样我们仍然可以使用像rails s
这样简单的东西来启动服务器,而不是每次都输入rails s -b 0.0.0.0
。也许:
转发配置文件并读取其中的内容,我可以在其中修改默认绑定ip (无需使用-c
)
rails s
vagrant (已尝试,但失败,请参见下面遇到的问题)
这背后的真正目标是,我希望我们的团队能够顺利升级,避免人们由于缺少-b 0.0.0.0
部件而不得不不断重启rails服务器的小故障。
我尝试了流浪端口转发,但当我访问主机上的localhost:3000
时仍然获得Connection Refused
。我尝试的两个配置行是:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
在官方文档中没有找到任何相关说明。任何帮助都将不胜感激。
发布于 2015-04-10 21:36:02
我在这里遇到了同样的问题,今天我找到了一个更好的解决方案。只需将此代码附加到您的config/boot.rb,它应该可以与vagrant一起工作。
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0', Port: 3000)
end
end
end
ps: Its基于:this answer
发布于 2015-02-23 16:40:13
您可以使用foreman通过自定义命令运行Procfile
:
# Procfile in Rails application root
web: bundle exec rails s -b 0.0.0.0
现在使用以下命令启动Rails应用程序:
foreman start
关于foreman的好处是你可以在Procfile中添加其他的应用程序(比如sidekiq,mailcatcher)。
foreman的缺点是你必须训练你的团队去运行foreman start
而不是rails s
。
发布于 2015-10-21 09:51:24
遇到了同样的问题。找到了博客Make Rails 4.2 server listens to all interfaces。
将以下内容添加到config/boot.rb
require 'rails/commands/server'
module Rails
class Server
alias :default_options_bk :default_options
def default_options
default_options_bk.merge!(Host: '0.0.0.0')
end
end
end
https://stackoverflow.com/questions/28668436
复制相似问题