Как отключить "Не удается удалить консоль из..." на 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