ruby-on-rails ruby-on-rails-4 vagrant ruby-on-rails-4.2

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