ruby on rails - ¿Cómo cambiar la ip de enlace predeterminada del servidor de desarrollo Rails 4.2?
ruby-on-rails ruby-on-rails-4.2 (8)
Aquí hay una solución más simple que estoy usando. Ya me gusta / necesito dotenv y puma-heroku , así que si usarlos no funciona para ti, entonces esto podría no ser para ti.
/config/puma.rb
gem ''dotenv-rails'', groups: [:development, :test]
Gemfile
PORT=8080
.env
port ENV.fetch("PORT") { 3000 }
Ahora puedo comenzar tanto el desarrollo como la producción con
rails s
.
Después de actualizar la aplicación de rails de nuestro equipo a 4.2, como se menciona en la
nota de
la
versión
, el
rails server
IP predeterminado se cambia a
localhost
desde
0.0.0.0
.
Desarrollamos con Vagrant, y queremos que el servidor de desarrollo sea accesible directamente desde el navegador en la máquina host.
En lugar de escribir
rails s -b 0.0.0.0
cada vez en adelante, me pregunto si hay alguna solución más elegante, de modo que podamos usar algo tan simple como
rails s
para iniciar el servidor.
Quizás:
-
un archivo de configuración
rails s
lecturas donde puedo modificar la ip de enlace predeterminada (sin usar-c
) - puerto hacia adelante con vagabundo (intentado pero fallido, vea el problema que se encuentra a continuación)
- un parche de mono a bastidor, que cambia la ip de enlace predeterminada
El objetivo real detrás de esto es que quiero que la actualización sea fluida entre nuestro equipo, evitando la falla que la gente tendrá que reiniciar constantemente su servidor de rieles debido a la parte faltante
-b 0.0.0.0
.
Intenté el reenvío de puertos vagabundo, pero aún así se
Connection Refused
cuando visito
localhost:3000
en la máquina host.
Las dos líneas de configuración que probé fue:
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: ''127.0.0.1'', host: 3000
No encontré ninguna instrucción relevante en los documentos oficiales. Cualquier ayuda será apreciada.
Cambie a
Puma
y especifique el
port
en
config/puma.rb
, por ejemplo:
set_default_host ''0.0.0.0'' # Note: Must come BEFORE defining the port
port ENV.fetch(''PORT'') { 3000 }
Aparentemente se unirá a 0.0.0.0 para el puerto especificado: https://github.com/puma/puma/issues/896
Para Rails 5.1.7 con Puma 3.12.1, la respuesta seleccionada no funciona, pero lo logré agregando lo siguiente a mi archivo
config/puma.rb
:
plugin :heroku
Determiné esto inspeccionando el
archivo dsl
.
Utiliza
instance_eval
en ese archivo, por lo que probablemente haya otras formas de hacerlo, pero esto me pareció lo más razonable.
Puede usar
foreman
para ejecutar un
Procfile
con sus comandos personalizados:
# Procfile in Rails application root
web: bundle exec rails s -b 0.0.0.0
Ahora inicie su aplicación Rails con:
foreman start
Lo bueno de foreman es que puede agregar otras aplicaciones al Procfile (como sidekiq, mailcatcher).
Lo malo de foreman es que tienes que entrenar a tu equipo para ejecutar el
foreman start
lugar de los
rails s
.
Se encontró con el mismo problema. Encontré el blog El servidor Make Rails 4.2 escucha todas las interfaces .
Agregue lo siguiente a config / boot.rb
require ''rails/commands/server''
module Rails
class Server
alias :default_options_bk :default_options
def default_options
default_options_bk.merge!(Host: ''0.0.0.0'')
end
end
end
Si usa docker u otra herramienta para administrar las variables de entorno, puede establecer la variable de entorno
HOST
en la IP que necesita vincular.
Ejemplo:
HOST=0.0.0.0
docker.env
archivo
docker.env
si usa Docker o
.env
si usa foreman.
Tengo el mismo problema aquí y hoy encontré una solución mejor. Simplemente agregue este código a su config / boot.rb y debería funcionar con vagabundo.
require ''rails/commands/server''
module Rails
class Server
def default_options
super.merge(Host: ''0.0.0.0'', Port: 3000)
end
end
end
ps: se basa en: esta respuesta
Si coloca las opciones predeterminadas en
config/boot.rb
, todos los atributos de comando para rake y rails fallan (por ejemplo:
rake -T
o
rails g model user
).
Entonces, agregue esto a
bin/rails
después de la línea
require_relative ''../config/boot''
y el código se ejecuta solo para el comando del servidor rails:
if ARGV.first == ''s'' || ARGV.first == ''server''
require ''rails/commands/server''
module Rails
class Server
def default_options
super.merge(Host: ''0.0.0.0'', Port: 3000)
end
end
end
end
Los archivos
bin/rails
muestran así:
#!/usr/bin/env ruby
APP_PATH = File.expand_path(''../../config/application'', __FILE__)
require_relative ''../config/boot''
# Set default host and port to rails server
if ARGV.first == ''s'' || ARGV.first == ''server''
require ''rails/commands/server''
module Rails
class Server
def default_options
super.merge(Host: ''0.0.0.0'', Port: 3000)
end
end
end
end
require ''rails/commands''