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

时间:2015-01-06 13:03:02

标签: ruby-on-rails ruby-on-rails-4 vagrant ruby-on-rails-4.2

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

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

所有内容都按照很多示例中的说明进行配置。

但是,当我尝试访问http://localhost:3000时,没有任何反应。我还试图转发到其他随机端口,如8081,25600,但没有成功。执行curl请求也没有任何结果(只有对等消息重置连接),并且VM内部的curl请求完美地工作(如预期的那样)。

我的PC和我的VM都运行Ubuntu 12.04。我使用的是Ruby 2.2.0和Rails 4.2.0。

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

5 个答案:

答案 0 :(得分:90)

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

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

答案 1 :(得分:9)

在特定端口上运行:

rails server -b 0.0.0.0 -p 8520

答案 2 :(得分:4)

使用

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

答案 3 :(得分:0)

您可以使用别名,在Ubuntu上将其放入~/.bash_aliases我使用:
alias rs="rails server -b 0.0.0.0"

您必须先重新加载终端你可以用它

答案 4 :(得分:0)

在这里找到非常好的解释:Rails 4.2.0.beta2 - Can't connect to 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默认只接受来自localhost的连接,   您只能从localhost访问服务器(例如,在VM内部);   来自另一台机器(例如VM的主机)的连接将无法工作。