Después de actualizar la aplicación rieles de nuestro equipo a 4.2, ya que la nota de lanzamiento se ha mencionado, la IP por defecto rails serverse une a se cambia a localhostpartir 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.0cada vez a partir de ahora, me pregunto si hay alguna solución más elegante, de modo que podamos usar algo tan simple como rails siniciar el servidor. Quizás:
- un archivo de configuración
rails slee donde puedo modificar la IP de enlace predeterminada (sin usar-c) - port forward con vagrant (intentado pero fallido, vea el problema encontrado a continuación)
- un parche de mono al 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 de que la gente tenga que reiniciar constantemente su servidor de rails debido a la -b 0.0.0.0parte que falta .
Intenté el reenvío de puertos vagabundos, pero aún obtengo Connection Refusedcuando visito localhost:3000en la máquina host. Las dos líneas de configuración que probé fueron:
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. Se agradecerá cualquier ayuda.
fuente

HOST=0.0.0.0, y el servidor de desarrollo de Rails utilizará automáticamente este valor.Respuestas:
Tengo el mismo problema aquí y hoy encontré una mejor solución. Simplemente agregue este código a su config / boot.rb y debería funcionar con vagrant.
require 'rails/commands/server' module Rails class Server def default_options super.merge(Host: '0.0.0.0', Port: 3000) end end endps: se basa en: esta respuesta
fuente
Puede usar foreman para ejecutar un
Procfilecon sus comandos personalizados:# Procfile in Rails application root web: bundle exec rails s -b 0.0.0.0Ahora inicie su aplicación Rails con:
foreman startLo bueno de Foreman es que puede agregar otras aplicaciones al Procfile (como sidekiq, mailcatcher).
Lo malo del capataz es que tienes que entrenar a tu equipo para que corra en
foreman startlugar de hacerlorails s.fuente
foreman stambién funcionará; puede ser una transición más fácil desderails s.Encontré el mismo problema. Encontré el blog Make Rails 4.2, el servidor 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 endfuente
Para Rails 5.1.7 con Puma 3.12.1, la respuesta seleccionada no funciona, pero lo logré agregando lo siguiente a mi
config/puma.rbarchivo:set_default_host '0.0.0.0' # Note: Must come BEFORE defining the port port ENV.fetch('PORT') { 3000 }Lo determiné inspeccionando el archivo dsl . Se usa
instance_evalen ese archivo, por lo que probablemente haya otras formas de hacerlo, pero esta me pareció la más razonable.fuente
Si activa las opciones predeterminadas,
config/boot.rbtodos los atributos de comando para rake y rails fallarán (ejemplo:rake -Torails g model user). Por lo tanto, agregue esto a labin/railslínea posteriorrequire_relative '../config/boot'y el código se ejecutará 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 endEl
bin/railsarchivo luce 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'fuente
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
plugin :herokuGemfile
gem 'dotenv-rails', groups: [:development, :test].env
PORT=8080Ahora puedo comenzar tanto con el desarrollo como con la producción
rails s.fuente
Cambie a Puma y especifique
portenconfig/puma.rb, por ejemplo:port ENV.fetch("PORT") { 3000 }Aparentemente, se vinculará a 0.0.0.0 para el puerto especificado: https://github.com/puma/puma/issues/896
fuente
Si usa Docker u otra herramienta para administrar las variables de entorno, puede establecer la
HOSTvariable de entorno en la IP que necesita vincular.Ejemplo:
HOST=0.0.0.0Agréguelo al
docker.envarchivo si usa Docker o.envsi usa Foreman.fuente
Para Rails 5 con Puma, la respuesta seleccionada no funciona. Puede obtener dicho error:
cannot load such file -- rails/commands/serverPara una solución adecuada, agregue lo siguiente a
config/puma.rb:bind 'tcp://0.0.0.0:3000'fuente