我按照RailsTutorial.org第3版(刚出来的那个)中的说明安装了Rails 4.2.0.beta2。我没有使用cloudIDE,而是在带有RVM的Windows 7主机上通过Vagrant使用Ubuntu Trusty 32。
rails _4.2.0.beta2_ new hello_app
然后粘贴在his gemfile sample。
之后,我跑了:
$ 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应用程序中,我将得到任何{{的实际文件大小1}}是。
答案 0 :(得分:17)
关于无法访问的服务器,来自Rails 4.2 release notes:
3.3 rails服务器的默认主机
由于Rack的更改,rails服务器现在默认侦听localhost而不是
0.0.0.0
。这应该对标准开发工作流程的影响最小,因为http://127.0.0.1:3000
和http://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。
答案 1 :(得分:4)
默认情况下,Rails 4.2绑定到127.0.0.1:3000
,而不是早期版本中的0.0.0.0:3000
。如果您有其他Rails项目使用您的配置,请尝试使用显式主机启动服务器:rails s -b 0.0.0.0
。
答案 2 :(得分:3)
名为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
答案 3 :(得分:0)
将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'