ruby-on-rails ruby-on-rails-4.2

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''