Rails 4.2.0.beta2 – 无法连接到LocalHost?

我按照RailsTutorial.org第3版(刚出来的那个)中的说明安装了Rails 4.2.0.beta2。 我没有使用cloudIDE,而是在带有RVM的Windows 7主机上通过Vagrant使用Ubuntu Trusty 32。

rails _4.2.0.beta2_ new hello_app然后粘贴在他的gemfile示例中 。

之后,我跑了:

 $ bundle install $ rails s 

服务器启动正常,但是当我尝试连接到localhost:3000我得到“找不到服务器”

Weirder仍然,我有一些其他Rails启动项目我一直在修补使用Rails 4.0.3和4.1.6,我能够连接到那里的服务器就好了。

我在这里想念的是什么? 当我使用最新版本创建新的Rails项目时,为什么我的浏览器无法连接,但它适用于旧版本?

另外,我尝试了wget http://0.0.0.0:3000 ,当它连接并收到200响应时,长度未指定,而在旧版本下的另一个全新的Rails应用程序,我会得到实际的文件大小index.html是。

关于无法访问的服务器,从Rails 4.2 发行说明 :

3.3 rails服务器的默认主机

由于Rack的更改,rails服务器现在默认侦听localhost而不是0.0.0.0 。 这应该对标准开发工作流程的影响最小,因为http://127.0.0.1:3000http://localhost:3000将继续像以前一样在您自己的计算机上工作。

但是,通过此更改,您将无法再从其他计算机访问Rails服务器(例如,您的开发环境位于虚拟机中,并且您希望从主机访问它),您需要启动服务器使用rails server -b 0.0.0.0恢复旧的行为。

如果执行此操作,请确保正确配置防火墙,以便只有网络上的受信任计算机才能访问您的开发服务器。

127.0.0.1:3000只允许来自端口3000上该地址的连接,而0.0.0.0:3000将允许来自端口3000的任何地址的连接。

由于Rails 4.2默认只接受来自localhost的连接,因此您只能从localhost访问服务器(例如,在VM内部); 来自另一台机器(例如VM的主机)的连接将不起作用。

您必须使用上述“旧行为”方法来允许来自VM主机的连接。


关于未指定的内容长度,这取决于正在使用的Web服务器。 我假设它使用的是不发送内容长度的分块编码。 资产将具有内容长度,但不包含HTML。

默认情况下,Rails 4.2绑定到127.0.0.1:3000 ,而不是早期版本中的0.0.0.0:3000 。 如果您有其他Rails项目使用您的配置,请尝试使用显式主机启动服务器: rails s -b 0.0.0.0

一个名为tostasqb的人在github上发布了一个非常有趣的解决方法,使旧的行为(Rails版本<4.2)成为默认行为。

只需编辑config / boot.rb文件并添加以下行:

 require 'rubygems' require 'rails/commands/server' module Rails class Server alias :default_options_alias :default_options def default_options default_options_alias.merge!(:Host => '0.0.0.0') end end end 

将gemfile修改为类似的内容并运行bundle update。 您指定的版本是显式的。 如果我没有粘贴你的gemfile,新的hello_world对我有用。

 gem 'rails', '~> 4.2.0.beta2' gem 'pg' gem 'bootstrap-sass', '~> 3.2.0' gem 'sass-rails', '~> 5.0.0.beta1' gem 'font-awesome-sass', '~> 4.2.0' gem 'sprockets-rails', '~> 3.0.0.beta1' gem 'coffee-rails', '~> 4.0.0' gem 'uglifier', '>= 1.0.3'