如何更改Rails 4.2开发服务器的默认绑定IP?

在将我们的团队的Rails应用程序升级到4.2之后,如发行说明所述,缺省的ip rails server绑定到从0.0.0.0更改为localhost

我们用Vagrant进行开发,并希望开发服务器可以直接从主机上的浏览器访问。

从现在开始,每次都不用inputrails s -b 0.0.0.0 ,我想知道是否还有更好的解决scheme,所以我们仍然可以像使用rails s那样简单rails s启动服务器。 也许:

  • 一个configuration文件的rails s读取我可以修改默认绑定IP(不使用-c
  • 端口与stream浪前进(尝试但失败,见下面遇到的问题)
  • 一个猴子补丁架,即改变默认绑定IP

这背后的真正目标是我希望升级能够在我们团队中顺利进行,避免由于缺less-b 0.0.0.0部分而导致人们不得不不断重启rails服务器的问题。

我尝试了stream浪端口转发,但是当我在主机上访问localhost:3000时仍然Connection Refused 。 我尝试的两个configuration行是:

 config.vm.network "forwarded_port", guest: 3000, host: 3000 config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', host: 3000 

没有在官方文档中find任何相关的说明。 任何帮助将不胜感激。

我在这里有同样的问题,我今天发现一个更好的解决scheme。 只需将此代码附加到您的config / boot.rb,它应该与stream浪汉一起工作。

 require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end 

ps:它基于: 这个答案

您可以使用工头使用您的自定义命令来运行Procfile

 # Procfile in Rails application root web: bundle exec rails s -b 0.0.0.0 

现在开始你的Rails应用程序:

 foreman start 

工头的好处是你可以添加其他应用程序到Procfile(如sidekiq,mailcatcher)。

领class不好的一面是你必须训练你的队伍来代替rails s运行foreman start

遇到了同样的问题。 find了Make Rails 4.2服务器监听所有接口的博客。

将以下内容添加到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 

如果将默认选项放在config/boot.rb则rake和rails的所有命令属性都会失败(例如: rake -Trails g model user )! 所以,在require_relative '../config/boot' bin/rails require_relative '../config/boot'require_relative '../config/boot' bin/rails ,代码只执行rails server命令:

 if ARGV.first == 's' || ARGV.first == 'server' require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end end 

bin/rails文件是这样的:

 #!/usr/bin/env ruby APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' # Set default host and port to rails server if ARGV.first == 's' || ARGV.first == 'server' require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end end end require 'rails/commands' 

这是我正在使用的一个更简单的解决scheme。 我已经喜欢/需要dotenv和puma-heroku ,所以如果使用这些不适合你,那么这可能不适合你。

/config/puma.rb

 plugin :heroku 

的Gemfile

 gem 'dotenv-rails', groups: [:development, :test] 

.ENV

 PORT=8080 

现在我可以用rails s来启动dev和production。