我试图在Vagrant中设置一个简单的Rails应用程序。这是我第一次设置Vagrant + rails。这是Vagrant文件。正如您所看到的,我将localhost:3000映射到guest:3000。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.network 'forwarded_port', guest: 3000, host: 3000
config.vm.provision 'shell', path: 'bootstrap/bootstrap_vagrant.sh'
end
这是我的引导程序文件,为简洁起见,我已将其删除:
#!/usr/bin/env bash
set -e
apt-get update
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8
apt-get -y install build-essential curl git-core python-software-properties htop vim
apt-get -y install nodejs # needed by Rails to have a Javascript runtime
apt-get -y install zlib1g-dev libssl-dev libreadline6-dev libyaml-dev libncurses5-dev libxml2-dev libxslt-dev
sudo -u vagrant printf 'cd /vagrant\n' >> /home/vagrant/.profile
su vagrant -c "mkdir -p /home/vagrant/downloads; cd /home/vagrant/downloads; \
wget --no-check-certificate https://ftp.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz; \
tar -xvf ruby-2.1.5.tar.gz; cd ruby-2.1.5; \
mkdir -p /home/vagrant/ruby; \
./configure --prefix=/home/vagrant/ruby --disable-install-doc; \
make; make install;"
sudo -u vagrant printf 'export PATH=/home/vagrant/ruby/bin:$PATH\n' >> /home/vagrant/.profile
su vagrant -c "/home/vagrant/ruby/bin/gem install bundler --no-ri --no-rdoc"
su vagrant -c "/home/vagrant/ruby/bin/gem install rails"
apt-get -y install libsqlite3-dev
su vagrant -c "export PATH=/home/vagrant/ruby/bin:$PATH; cd /vagrant; bundle;"
su vagrant -c "export PATH=/home/vagrant/ruby/bin:$PATH; cd /vagrant; bundle exec rake db:create;"
su vagrant -c "export PATH=/home/vagrant/ruby/bin:$PATH; cd /vagrant; bundle exec rake db:setup;"
su vagrant -c "export PATH=/home/vagrant/ruby/bin:$PATH; cd /vagrant; bundle exec rake db:seed;"
在重新加载流浪者环境期间,似乎端口转发正在运行:
==>默认:转发端口...... 默认值:3000 => 3000(适配器1) 默认值:22 => 2222(适配器1)
设置完成后,我ssh到vagrant box,创建了一个rails应用程序,然后通过运行bundle exec rails s启动它。
如果我ssh到流浪汉环境,并运行curl http://localhost:3000,我会看到Rails欢迎页面。所以rails服务器运行正常。但是,如果我从笔记本电脑(主机环境)转到http://localhost:3000,它就无法加载。通过curl击中它也不会有任何帮助。
$ curl http://localhost:3000
curl: (52) Empty reply from server
我的主机环境是OSX 10.9.5。 (小牛)。在首选项中禁用防火墙。
答案 0 :(得分:6)
您的开发服务器没有收听正确的IP地址,这就是您可以从Vagrant来宾(localhost
,127.0.0.1
- rails server
的默认绑定)中访问它的原因,但是不是从外面(你的笔记本电脑 - 主机)
告诉您的开发服务器倾听您可公开访问的界面。
为了使服务器侦听所有接口,请将其绑定到IP 0.0.0.0
:
bin/rails server -b 0.0.0.0