ruby on rails - Rails 4.2 El reenvío del puerto del servidor en Vagrant no funciona
ruby-on-rails ruby-on-rails-4 (5)
Tengo una VM Vagrant con Rails instalada con una aplicación de muestra. La VM está configurada para reenviar el puerto 3000 (del servidor Rails Webrick) a mi puerto host 3000.
config.vm.network "forwarded_port", guest: 3000, host: 3000
Todo está configurado como se ve en muchos ejemplos.
Pero, cuando intento acceder a http://localhost:3000
no pasa nada. También intenté reenviar a otros puertos aleatorios como 8081, 25600, sin éxito. Hacer una solicitud de curl tampoco obtiene nada (solo un restablecimiento de conexión por el mensaje de igual ), y una solicitud de curl dentro de VM funciona perfectamente (como se esperaba).
Tanto mi PC como mi VM ejecutan Ubuntu 12.04. Estoy usando Ruby 2.2.0 y Rails 4.2.0.
Un punto importante es que Apache funciona normalmente. Reenvió el puerto 80 al puerto 8080 y todo funciona. Parece que el problema es solo con el servidor de Rails, incluso si uso otros puertos (por ejemplo, el rails server -p 4000
)
Explicación realmente agradable que se encuentra aquí: Rails 4.2.0.beta2 - ¿No se puede conectar a LocalHost?
Tenía exactamente el mismo problema, con la excepción de que mi PC es una máquina Mac. He utilizado este archivo vagrant para que funcione (con 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
después de tener la VM en funcionamiento, ejecutaba bundle install
en mi repositorio de proyecto y luego rails server -b 0.0.0.0
. Como se señala en la respuesta vinculada más arriba:
127.0.0.1:3000 solo permitirá conexiones desde esa dirección en el puerto 3000, mientras que 0.0.0.0:3000 permitirá conexiones desde cualquier dirección en el puerto 3000.
Como Rails 4.2 solo acepta conexiones de localhost por defecto, solo puede acceder al servidor desde el host local (por ejemplo, dentro de la VM); las conexiones desde otra máquina (por ejemplo, el host de VM) no funcionarán.
Para ejecutar en un puerto específico:
rails server -b 0.0.0.0 -p 8520
Puedes usar un alias, en Ubuntu ponerlo en ~/.bash_aliases
Yo suelo:
alias rs="rails server -b 0.0.0.0"
Tienes que volver a cargar el terminal antes de poder usarlo
Rails 4.2 ahora se une a 127.0.0.1
de manera predeterminada y no a 0.0.0.0
.
Inicie el servidor usando el servidor bin/rails server -b 0.0.0.0
y eso debería ordenarlo.
Uso :
rails s -b 0.0.0.0
o
Agregar a 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
y trabajar con rails s