web-dev-qa-db-fra.com

Comment désactiver "Impossible de rendre la console à partir de ..." sur Rails

J'utilise Ubuntu/vagrant comme environnement de développement. Je reçois ces messages sur la console Rails:

Started GET "/assets/home-fcec5b5a277ac7c20cc9f45a209a3bcd.js?body=1" for 10.0.2.2 at 2015-04-02 15:48:31 +0000
Cannot render console from 10.0.2.2! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255

Est-il possible de désactiver ces messages "ne peut pas rendre ..." ou de les autoriser de quelque manière que ce soit?

125
Leandro França

Vous devez ajouter à la liste blanche l'espace réseau 10.0.2.2 dans la configuration de la console Web.

Donc, vous voulez quelque chose comme ça:

class Application < Rails::Application
  config.web_console.whitelisted_ips = '10.0.2.2'
end

Lire ici pour plus d'informations.

Comme souligné par pguardiario , cela veut aller dans config/environments/development.rb plutôt que config/application.rb afin qu'il ne soit appliqué que dans votre environnement de développement.

155
ydaetskcoR

Vous pouvez ajouter des adresses IP uniques ou des réseaux entiers à la liste blanche.

Supposons que vous souhaitiez partager votre console avec 192.168.0.100. Tu peux le faire:

class Application < Rails::Application
  config.web_console.whitelisted_ips = '192.168.0.100'
end

Si vous souhaitez ajouter tout le réseau privé à la liste, vous pouvez effectuer les opérations suivantes:

class Application < Rails::Application
  config.web_console.whitelisted_ips = '192.168.0.0/16'
end

Si vous ne voulez plus voir ce message, définissez cette option sur false:

class Application < Rails::Application
  config.web_console.whiny_requests = false
end

Faites attention à ce que vous souhaitez, car vous pourriez tout avoir

Ceci est probablement uniquement à des fins de développement, vous pouvez donc préférer le placer sous config/environments/development.rb au lieu de config/application.rb.

75
Flavio Wuensche

Coder en dur une IP dans un fichier de configuration n'est pas bon. Qu'en est-il des autres développeurs? Et si l'IP change?

La configuration liée à Docker ne doit pas pénétrer dans l'application Rails autant que possible. C'est pourquoi vous devez utiliser env vars dans le fichier config/environments/development.rb:

class Application < Rails::Application
  # Check if we use Docker to allow docker ip through web-console
  if ENV['DOCKERIZED'] == 'true'
    config.web_console.whitelisted_ips = ENV['DOCKER_Host_IP']
  end
end

Vous devez définir les variables env correctes dans un fichier .env, non suivi dans le contrôle de version.

Dans docker-compose.yml, vous pouvez injecter env vars à partir de ce fichier avec env_file:

app:
  build: .
  ports:
   - "3000:3000"
  volumes:
    - .:/app
  links:
    - db
  environment:
    - DOCKERIZED=true
  env_file:
    - ".env"
30
Pak

Découverte automatique dans votre config/development.rb

config.web_console.whitelisted_ips = Socket.ip_address_list.reduce([]) do |res, addrinfo|
    addrinfo.ipv4? ? res << IPAddr.new(addrinfo.ip_address).mask(24) : res
end

Bien sûr, il faudra peut-être ajouter

require 'socket'
require 'ipaddr'

Dans votre fichier.

18
user2481743

Toute personne sur l'un de mes réseaux privés est la bienvenue.

Je cours dans un conteneur Docker et je ne me soucie pas du réseau qu'il veut utiliser cette semaine.

config/environnements/development.rb add line

config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
7
kwerle

Pour l'environnement de développement: Détectez s'il s'agit d'un menu fixe, puis déterminez l'adresse IP et mettez-la en liste blanche

# config/environments/development.rb
require 'socket'
require 'ipaddr'

Rails.application.configure do
  ...

  # When inside a docker container
  if File.file?('/.dockerenv')
    # Whitelist docker ip for web console
    # Cannot render console from 172.27.0.1! Allowed networks: 127.0.0.1
    Socket.ip_address_list.each do |addrinfo|
      next unless addrinfo.ipv4?
      next if addrinfo.ip_address == "127.0.0.1" # Already whitelisted

      ip = IPAddr.new(addrinfo.ip_address).mask(24)

      Logger.new(STDOUT).info "Adding #{ip.inspect} to config.web_console.whitelisted_ips"

      config.web_console.whitelisted_ips << ip
    end
  end
end

Pour moi cela imprime ce qui suit et l'avertissement s'en va ????

Adding 172.27.0.0 to config.web_console.whitelisted_ips
Adding 172.18.0.0 to config.web_console.whitelisted_ips

Ma solution était de combiner

5
Scymex

Si vous utilisez Docker, il est fort probable que vous ne souhaitiez ni introduire de nouvelles variables ENV, ni coder en dur votre adresse IP spécifique.

Au lieu de cela, vous voudrez peut-être vérifier que vous êtes dans Docker en utilisant /proc/1/cgroup et autoriser votre IP hôte (à la fois pour web_console et better_errors). Ajouter à votre config/environments/development.rb

  # https://stackoverflow.com/a/20012536/4862360
  if File.read('/proc/1/cgroup').include?('docker')
    # https://stackoverflow.com/a/24716645/4862360
    Host_ip = `/sbin/ip route|awk '/default/ { print $3 }'`.strip

    BetterErrors::Middleware.allow_ip!(Host_ip) if defined?(BetterErrors::Middleware)
    config.web_console.whitelisted_ips << Host_ip
  end
3

Pour moi, whitelisted_ips ne semblait pas fonctionner dans un nouveau projet. Le fichier Lisez-moi indique que l'entrée de configuration correspondante est supposée être permissions maintenant:

Rails.application.configure do
  config.web_console.permissions = '192.168.0.0/16'
end

https://github.com/Rails/web-console/blob/master/README.markdown

0
Fabian Kübler

Si vous ne voulez plus voir ce message d'erreur, vous pouvez ajouter cette ligne dans development.rb

config.web_console.whiny_requests = false
0
Sai Ram Reddy