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的主机)的连接将不起作用。