如何更改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 -T
或rails 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。