Après la mise à niveau de l’application rails de notre équipe vers la version 4.2, comme indiqué dans la note de publication , le rails server
ip rails server
par défaut lié à est modifié en localhost
partir de 0.0.0.0
.
Nous développons avec Vagrant et souhaitons que le serveur de développement soit accessible directement depuis le navigateur sur la machine hôte.
Au lieu de taper rails s -b 0.0.0.0
chaque fois, je me demande s’il existe une solution plus élégante, de sorte que nous puissions toujours utiliser sth aussi simplement que des rails s
pour démarrer le serveur. Peut-être:
rails s
lit où je peux modifier l’ip de liaison par défaut (sans utiliser -c
) Le véritable objective derrière cela est que je souhaite que la mise à niveau se fasse en douceur au sein de notre équipe, en évitant le problème que les utilisateurs devront constamment redémarrer sur leur serveur de rails à cause de la partie -b 0.0.0.0
manquante.
J’ai essayé le transfert de port vagrant, mais j’obtiens toujours Connection Refused
lorsque 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
Vous n’avez trouvé aucune instruction pertinente dans les documents officiels. 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: Sa basé sur: cette réponse
Vous pouvez utiliser le 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
Maintenant, lancez votre application Rails avec:
foreman start
La bonne chose à propos de contremaître est que vous pouvez append d’autres applications au Procfile (comme sidekiq, mailcatcher).
La mauvaise chose à propos du contremaître est que vous devez former votre équipe pour lancer le foreman start
au lieu des rails s
.
Rencontré le même problème. Trouvé le blog Make Rails 4.2 serveur é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 placez les options par défaut sur config/boot.rb
tous les atsortingbuts de commande pour rake et rails échouent (exemple: rake -T
ou rails g model user
)! Donc, ajoutez ceci à bin/rails
après la ligne require_relative '../config/boot'
et le code est exécuté uniquement pour la commande du 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 fichier bin/rails
ressemble à 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'
Voici une solution plus simple que j’utilise. J’aime déjà / besoin de dotenv et de puma-heroku , donc si cela ne fonctionne pas pour vous, cela pourrait ne pas être pour vous.
/config/puma.rb
plugin :heroku
Gemfile
gem 'dotenv-rails', groups: [:development, :test]
.env
PORT=8080
Maintenant, je peux lancer le développement et la production avec des rails s
.
Passez à Puma et spécifiez le port
dans config/puma.rb
, par exemple:
port ENV.fetch("PORT") { 3000 }
Apparemment, il sera lié à 0.0.0.0 pour le port spécifié: https://github.com/puma/puma/issues/896