Rails 4.2 Vagrant上的服务器端口转发不起作用

我有一个安装了示例应用程序的Rails Vagrant虚拟机。 VMconfiguration为将端口3000(Rails Webrick服务器)转发到我的主机3000端口。

config.vm.network "forwarded_port", guest: 3000, host: 3000 

所有的configuration都在很多例子中看到。

但是,当我尝试访问http://localhost:3000没有任何反应。 我也尝试转发到其他随机端口像8081,25600,没有成功。 做一个curl请求也没有得到任何东西(只是由对等消息重置一个连接 ),并在VM内的curl请求完美(如预期的)。

我的电脑和我的虚拟机运行Ubuntu 12.04。 我正在使用Ruby 2.2.0和Rails 4.2.0。

重要的一点是Apache正常工作。 我将端口80转发到端口8080,一切正常。 看来问题就在于Rails服务器,即使我使用其他端口(例如rails server -p 4000

现在,Rails 4.2默认绑定到127.0.0.1 ,而不是0.0.0.0

使用bin/rails server -b 0.0.0.0启动服务器,并对其进行sorting。

运行在特定的端口上:

 rails server -b 0.0.0.0 -p 8520 

用途

rails s -b 0.0.0.0

要么

添加config/boot.rb

 require 'rails/commands/server' module Rails class Server new_defaults = Module.new do def default_options default_host = Rails.env == 'development' ? '0.0.0.0' : '127.0.0.1' super.merge( Host: default_host ) end end # Note: Module#prepend requires Ruby 2.0 or later prepend new_defaults end end 

并与rails s工作

你可以使用别名,在Ubuntu上把它放在~/.bash_aliases
我用:
alias rs="rails server -b 0.0.0.0"

您必须重新加载terminal才能使用它

在这里find了非常好的解释: Rails 4.2.0.beta2 – 无法连接到LocalHost?

我有完全相同的问题,除了我的电脑是Mac机。 我用这个vagrantfile来使它工作(使用virtualbox 4.3.36)

 # -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Use Ubuntu 14.04 Trusty Tahr 64-bit as our operating system config.vm.box = "ubuntu/trusty64" # Configurate the virtual machine to use 2GB of RAM config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] end config.vm.provision "shell", inline: <<-SHELL ## Install necessary dependencies sudo apt-get --assume-yes install libsqlite3-dev libcurl4-openssl-dev git ## Install GPG keys and download rvm, ruby and rails curl -sSL https://rvm.io/mpapis.asc | gpg --import - curl -L https://get.rvm.io | bash -s stable --ruby curl -L https://get.rvm.io | bash -s stable --rails echo "[[ ls \"$HOME/.rvm/scripts/rvm\" ]] && . \"$HOME/.rvm/scripts/rvm\"" >> ~/.profile ## Adding vagrant user to the group that can access rvm usermod -G rvm vagrant SHELL # Forward the Rails server default port to the host config.vm.network :forwarded_port, guest: 3000, host: 3000 end 

在VM启动并运行之后,我会在我的项目仓库中运行bundle install ,然后rails server -b 0.0.0.0 。 正如上面的链接答案中指出的那样:

127.0.0.1:3000只允许3000端口的连接,而0.0.0.0:3000则允许3000端口的连接。

由于Rails 4.2默认只接受来自本地主机的连接,所以你只能从本地主机访问服务器(例如在虚拟机内部)。 来自另一台机器(例如VM的主机)的连接将不起作用。