Après la mise à niveau de notre Rails) de notre équipe vers la version 4.2, comme indiqué dans le note de version , l'adresse IP par défaut Rails server
La liaison à est modifiée en localhost
à partir de 0.0.0.0
.
Nous développons avec Vagrant et souhaitons que le serveur de développement soit accessible directement à partir du navigateur de la machine hôte.
Au lieu de taper Rails s -b 0.0.0.0
à chaque fois à partir de maintenant, je me demande s’il existe une solution plus élégante pour pouvoir utiliser une chose aussi simple que Rails s
pour démarrer le serveur. Peut-être:
Rails s
lit où je peux modifier l’adresse IP de liaison par défaut (sans utiliser -c
)Le but réel derrière tout cela est que je souhaite que la mise à niveau se déroule sans heurts parmi notre équipe, évitant ainsi le problème qui obligera les utilisateurs à redémarrer constamment leur serveur Rails en raison du fichier manquant -b 0.0.0.0
partie.
J'ai essayé la redirection de port vagabond, mais j'obtiens toujours Connection Refused
quand je visite localhost:3000
sur la machine hôte. Les deux lignes de configuration que j'ai essayées étaient:
config.vm.network "forwarded_port", guest: 3000, Host: 3000
config.vm.network "forwarded_port", guest: 3000, guest_ip: '127.0.0.1', Host: 3000
Je n'ai trouvé aucune instruction pertinente dans la documentation officielle. Toute aide serait appréciée.
J'ai le même problème ici et j'ai trouvé aujourd'hui une meilleure solution. Ajoutez simplement ce code à votre config/boot.rb et cela devrait fonctionner avec 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: Son basé sur: cette réponse
Vous pouvez utiliser contremaître pour exécuter un Procfile
avec vos commandes personnalisées:
# Procfile in Rails application root
web: bundle exec Rails s -b 0.0.0.0
Lancez maintenant votre application Rails avec:
foreman start
La bonne chose à propos de Foreman est que vous pouvez ajouter d’autres applications au Procfile (telles que sidekiq, mailcatcher).
La mauvaise chose à propos de contremaître est que vous devez former votre équipe à courir foreman start
au lieu de Rails s
.
Rencontré le même problème. Trouvé le blog Make Rails 4.2 écoute toutes les interfaces .
Ajoutez ce qui suit à 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 vous mettez les options par défaut sur config/boot.rb
puis tous les attributs de commande pour rake et Rails échoue (exemple: rake -T
ou Rails g model user
)! Donc, ajoutez ceci à bin/Rails
après la ligne require_relative '../config/boot'
et le code n’est exécuté que pour la commande serveur 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
Le bin/Rails
fichier loks comme ceci:
#!/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'
Pour Rails 5.1.7 avec Puma 3.12.1, la réponse sélectionnée ne fonctionne pas, mais je l’ai accomplie en ajoutant ce qui suit à mon config/puma.rb
fichier:
set_default_Host '0.0.0.0' # Note: Must come BEFORE defining the port
port ENV.fetch('PORT') { 3000 }
J'ai déterminé cela en inspectant le fichier DSL . Il utilise instance_eval
_ sur ce fichier, il y a probablement d'autres façons de le faire, mais cela me semblait le plus raisonnable.
Voici une solution plus simple que j'utilise. J'aime déjà/j'ai besoin de dotenv et puma-herok , donc si vous ne les utilisez pas, cela risque de ne pas être pour vous.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-Rails', groups: [:development, :test]
. env
PORT=8080
Maintenant, je peux démarrer à la fois dev et production avec Rails s
.
Basculez vers Puma et spécifiez port
dans config/puma.rb
, par exemple.:
port ENV.fetch("PORT") { 3000 }
Apparemment, il se liera à 0.0.0.0 pour le port spécifié: https://github.com/puma/puma/issues/896
Si vous utilisez docker ou un autre outil pour gérer les variables d'environnement, vous pouvez définir la variable d'environnement Host
sur l'adresse IP que vous souhaitez associer.
Exemple: Host=0.0.0.0
Ajoutez-le à docker.env
fichier si vous utilisez Docker ou .env
si vous utilisez un contremaître.