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