将我们团队的rails应用程序升级到4.2之后,如release note所述,默认的ip rails server
绑定从localhost
更改为0.0.0.0
。
我们使用Vagrant开发,并希望可以直接从主机上的浏览器访问开发服务器。
我不知道从现在开始每次都输入rails s -b 0.0.0.0
,我想知道是否还有更优雅的解决方案,这样我们仍然可以使用像rails s
那样简单的启动服务器。也许:
rails s
读取我可以修改默认绑定ip的位置(不使用-c
)这背后的真正目标是我希望我们团队之间的升级顺利进行,避免由于缺少-b 0.0.0.0
部分而导致人们不断重启其rails服务器的故障。
我尝试了流浪汉端口转发,但当我在主机上访问Connection Refused
时仍然获得localhost:3000
。我尝试的两个配置行是:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000
在官方文档中未找到任何相关说明。任何帮助将不胜感激。
答案 0 :(得分:68)
我在这里遇到同样的问题,今天我发现了一个更好的解决方案。只需将此代码附加到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:它基于:this answer
答案 1 :(得分:45)
您可以使用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 start
而不是rails s
。
答案 2 :(得分:18)
遇到同样的问题。找到了博客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
答案 3 :(得分:1)
这是我正在使用的更简单的解决方案。我已经喜欢/需要dotenv和puma-heroku,所以如果使用这些不适合你,那么这可能不适合你。
<强> /config/puma.rb 强>
plugin :heroku
<强>的Gemfile 强>
gem 'dotenv-rails', groups: [:development, :test]
<强> .ENV 强>
PORT=8080
现在我可以使用rails s
启动dev和production。
答案 4 :(得分:1)
切换到Puma并在port
中指定config/puma.rb
,例如:
port ENV.fetch("PORT") { 3000 }
显然它将绑定到指定端口的0.0.0.0:https://github.com/puma/puma/issues/896
答案 5 :(得分:1)
对于带有Puma 3.12.1的Rails 5.1.7,选择的答案不起作用,但是我通过将以下内容添加到我的config/puma.rb
文件中来完成了该任务:
set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port
port ENV.fetch('PORT') { 3000 }
我通过检查dsl file确定了这一点。它在该文件上使用instance_eval
,因此可能有其他方法可以执行此操作,但这对我来说似乎是最合理的。
答案 6 :(得分:0)
如果使用docker或其他工具来管理环境变量,则可以将HOST
环境变量设置为需要绑定的IP。
示例:
HOST=0.0.0.0
如果使用Docker,则将其添加到docker.env
文件中;如果使用工头,则将其添加到.env
中。
答案 7 :(得分:0)
对于带有Puma的Rails 5,选择的答案不起作用。您可能会收到以下错误消息:cannot load such file -- rails/commands/server
要获得适当的解决方案,请在config/puma.rb
中添加以下内容:
bind 'tcp://0.0.0.0:3000'