这是我的Vagrantfile
:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu-14.04-x64"
# Sync'd folders
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "~/work", "/home/vagrant/work", create: true
config.vm.synced_folder "~/apt-archives", "/var/cache/apt/archives/", create: true
# Ubuntu VM
config.vm.define "ubuntu" do |ubuntu|
ubuntu.vm.provision "shell", path: "provision.sh", privileged: false
ubuntu.vm.network "forwarded_port", guest: 3000, host: 8080 # http
ubuntu.vm.network "private_network", ip: "10.20.30.100"
ubuntu.vm.hostname = "ubuntu"
# VirtualBox Specific Stuff
# https://www.virtualbox.org/manual/ch08.html
config.vm.provider "virtualbox" do |vb|
# Set more RAM
vb.customize ["modifyvm", :id, "--memory", "2048"]
# More CPU Cores
vb.customize ["modifyvm", :id, "--cpus", "2"]
end # End config.vm.provider virtualbox
end # End config.vm.define ubuntu
end
例如,当我使用端口3000运行rails app时,我将访问来宾计算机http://localhost:3000
。
但我试图通过主机的浏览器访问该应用。
以下都不起作用:
http://10.20.30.100:8080
https://10.20.30.100:8080
http://10.20.30.100:3000
https://10.20.30.100:3000
主持人上的浏览器显示: ERR_CONNECTION_REFUSED
答案 0 :(得分:3)
出于安全原因,Rails 4.2在开发模式下限制远程访问。这是通过将服务器绑定到'localhost'而不是'0.0.0.0'....
来完成的要访问在VM上运行的Rails(例如由Vagrant创建的Rails),您需要将默认的Rails IP绑定更改回“0.0.0.0”。
请参阅以下StackOverflow Question的答案,建议采用多种不同方法。
这个想法是通过强制执行以下命令来运行Rails:
rails s -b 0.0.0.0
或者通过将绑定硬编码到Rails应用程序中(我觉得不太理想):
# add this to config/boot.rb
require 'rails/commands/server'
module Rails
class Server
def default_options
super.merge(Host: '0.0.0.0')
end
end
end
就个人而言,我可能会接受使用foreman和Procfile的建议:
# Procfile in Rails application root
web: bundle exec rails s -b 0.0.0.0
我认为,这将允许更容易的部署同步性。