我有一个 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 的主机)将不起作用。