Как отключить "Не удается удалить консоль из..." на Rails

Я использую Ubuntu/vagrant в качестве среды разработки. Я получаю эти сообщения на консоли 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

Можно ли отключить эти сообщения "can not render..." или разрешить их каким-либо образом?

Ответ 1

Для настройки сетевого пространства 10.0.2.2 в конфигурацию веб-консоли необходимо добавить белый список.

Итак, вам нужно что-то вроде этого:

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

Подробнее читайте здесь.

Как указал pguardiario, он хочет перейти в config/environments/development.rb, а не config/application.rb, поэтому он применяется только в вашей среде разработки.

Ответ 2

Вы можете переадресовывать отдельные IP-адреса или целые сети.

Предположим, вы хотите поделиться своей консолью с помощью 192.168.0.100. Вы можете сделать это:

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

Если вы хотите использовать белый список всей частной сети, вы можете сделать:

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

Если вы больше не хотите видеть это сообщение, установите для этого параметра значение false:

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

Будьте осторожны, что вы хотите, потому что вы можете просто получить все это

Это, вероятно, только для целей разработки, поэтому вы можете предпочесть разместить его под config/environments/development.rb вместо config/application.rb.

Ответ 3

Жесткое кодирование IP в файл конфигурации не очень хорошо. А как насчет других разработчиков? Что если IP-адрес изменится?

Связанный с Docker конфиг не должен попадать в приложение rails, когда это возможно. Вот почему вы должны использовать env vars в файле 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

Вы должны установить правильные переменные env в файле .env, которые не отслеживаются в системе контроля версий.

В docker-compose.yml вы можете добавить env vars из этого файла с помощью env_file:

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

Ответ 4

Автоматическое обнаружение в вашем 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

Конечно, может потребоваться добавить

require 'socket'
require 'ipaddr'

В вашем файле.

Ответ 5

Приветствуется любое из моих личных сетей.

Я запускаю контейнер-докер, и мне все равно, какая сеть он хочет использовать на этой неделе.

config/environment/development.rb добавить строку

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

Ответ 6

Для среды разработки: определите, является ли это докером, затем определите IP-адрес и внесите его в белый список.

# 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

Для меня это печатает следующее, и предупреждение уходит 🎉

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

Моим решением было объединить

Ответ 7

Если вы используете Docker, скорее всего, вы не хотите ни вводить новые переменные ENV, ни жестко кодировать свой конкретный IP-адрес.

Вместо этого вы можете захотеть проверить, что вы находитесь в Docker, используя /proc/1/cgroup, и разрешить IP вашего хоста (как для web_console и better_errors). Добавьте в ваш 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

Ответ 8

Если вы хотите прекратить просмотр этого сообщения об ошибке, вы можете добавить эту строку в development.rb

config.web_console.whiny_requests = false

Ответ 9

Для меня whitelisted_ips, похоже, не работает в новом проекте. В файле Readme указано, что соответствующая запись конфигурации должна иметь permissions:

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

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

Ответ 10

class Application < Rails::Application
  config.web_console.whitelisted_ips = %w( 0.0.0.0/0 ::/0 )
end