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 server
se une a se cambia a localhost
partir 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 a partir de ahora, me pregunto si hay alguna solución más elegante, de modo que podamos usar algo tan simple como rails s
iniciar el servidor. Quizás:
- un archivo de configuración
rails s
lee 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.0
parte que falta .
Intenté el reenvío de puertos vagabundos, pero aún obtengo Connection Refused
cuando visito localhost:3000
en 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 end
ps: se basa en: esta respuesta
fuente
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 del capataz es que tienes que entrenar a tu equipo para que corra en
foreman start
lugar de hacerlorails s
.fuente
foreman s
tambié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 end
fuente
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.rb
archivo: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_eval
en 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.rb
todos los atributos de comando para rake y rails fallarán (ejemplo:rake -T
orails g model user
). Por lo tanto, agregue esto a labin/rails
lí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 end
El
bin/rails
archivo 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 :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
Ahora puedo comenzar tanto con el desarrollo como con la producción
rails s
.fuente
Cambie a Puma y especifique
port
enconfig/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
HOST
variable de entorno en la IP que necesita vincular.Ejemplo:
HOST=0.0.0.0
Agréguelo al
docker.env
archivo si usa Docker o.env
si usa Foreman.fuente
Para Rails 5 con Puma, la respuesta seleccionada no funciona. Puede obtener dicho error:
cannot load such file -- rails/commands/server
Para una solución adecuada, agregue lo siguiente a
config/puma.rb
:bind 'tcp://0.0.0.0:3000'
fuente