web-dev-qa-db-fra.com

Comment changer l'adresse IP de liaison par défaut du Rails 4.2?)?

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:

  • un fichier de configuration Rails s lit où je peux modifier l’adresse IP de liaison par défaut (sans utiliser -c)
  • port forward avec vagrant (essayé mais échoué, voir problème rencontré ci-dessous)
  • un patch de singe à monter, qui change l'adresse IP de liaison par défaut

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.

81
Huang Tao

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

70
imarcelolz

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.

45
zwippie

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
18
Bian Jiaping

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

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.

1
jsmartt

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.

1
John Bachir

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

1
prusswan

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.

0
Paulo Fidalgo