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



我有一个 Vagrant VM,其中安装了 Rails,并带有一个示例应用程序。虚拟机配置为将端口 3000(Rails Webrick 服务器的)转发到我的主机 3000 端口。

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

一切都按照许多示例中所示进行配置。

但是,当我尝试访问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 启动服务器,这应该对其进行排序。

要在特定端口上运行:

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"

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

在这里找到非常好的解释: Rails 4.2.0.beta2 - 无法连接到本地主机?

我遇到了完全相同的问题,除了我的电脑是Mac机器。我已经使用这个流浪文件来让它工作(使用 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 的任何地址的连接 端口 3000。

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

最新更新