Я использую Ubuntu / vagrant в качестве среды разработки. Я получаю эти сообщения на консоли рельсов:
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
Можно ли отключить эти сообщения «не удается отобразить ...» или разрешить их каким-либо образом?
ruby-on-rails
vagrant
Леандро Франса
источник
источник
config/environments/development.rb
, @ydaetskcoRENV.fetch('SSH_CLIENT', '127.0.0.1').split(' ').first
. В общем, это, вероятно, будет 10.0.2.2, но он должен отражать любую активную конфигурацию сети (на самом деле бродячая или нет - что, конечно, может быть, а может и не быть тем, что вы хотите).config.web_console.whitelisted_ips
. Вторая - это сообщения об ошибках, которые вы видите в своих журналах. Это контролируетсяconfig.web_console.whiny_requests
. Наконец, и это была проблема, с которой я столкнулся, ошибка IP белого списка была вызвана тем, что rails пытались отобразить консоль в качестве механизма по умолчанию для обработки другой ошибки. Так что исправление другой ошибки или изменение значения по умолчанию также должны помочь.Вы можете занести в белый список отдельные 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
.источник
Жесткое кодирование IP-адреса в файле конфигурации нехорошо. А как насчет других разработчиков? Что делать, если ip изменится?
Конфигурация, связанная с Docker, по возможности не должна попадать в приложение rails. Вот почему вы должны использовать в
config/environments/development.rb
файле env vars :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_file
:app: build: . ports: - "3000:3000" volumes: - .:/app links: - db environment: - DOCKERIZED=true env_file: - ".env"
Основываясь на фибдаке, полученном в комментариях, мы также можем построить решение без переменных окружения:
class Application < Rails::Application # Check if we use Docker to allow docker ip through web-console if File.file?('/.dockerenv') == true host_ip = `/sbin/ip route|awk '/default/ { print $3 }'`.strip config.web_console.whitelisted_ips << host_ip end end
Я оставлю решения с env var в учебных целях.
источник
.env
не следует проверять в системе контроля версий, любой может переопределить это в своей собственной среде. Информация о докере все равно просачивается в приложение, мы просто минимизируем ущерб здесь :)env_file
и из вашего ответа. 👍environment
docker-compose.yml
DOCKERIZED
переменную -env. Docker создает/.dockerenv
-файл, который вы можете проверить:File.file?('/.dockerenv') => true
и вы находитесь внутри контейнера.Автоматическое открытие в вашем
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'
В вашем файле.
источник
config.web_console.whitelisted_ips = Socket.ip_address_list.select(&:ipv4?).map{ |addrinfo| IPAddr.new(addrinfo.ip_address).mask(24) }
config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
из ответа @kwerle ?Добро пожаловать в любую из моих частных сетей.
Я использую докер-контейнер, и мне все равно, какую сеть он хочет использовать на этой неделе.
config / environment / development.rb добавить строку
config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
источник
Для среды разработки: определите, если это докер, затем определите 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
Моим решением было объединить
источник
undefined method <<' for nil:NilClass (NoMethodError)
. Итак, я создал переменную с именемwhitelisted_ips = [ ]
, использовал ее внутри цикла, добавляя ips, и после цикла:config.web_console.whitelisted_ips = whitelisted_ips
и тогда это сработало для меня! Так что спасибо!Если вы используете 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
источник
class Application < Rails::Application config.web_console.whitelisted_ips = %w( 0.0.0.0/0 ::/0 ) end
источник
Для меня
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
источник
Если вы запускаете свой сайт локально (на хосте), это обычно работает, так
127.0.0.1
как всегда разрешено . Но если вы собираетесь поместить свой сайт в контейнер (не в производственной среде, локально), вы можете добавить это вconfig/environments/development.rb
:require 'socket' require 'ipaddr' Rails.application.configure do ... config.web_console.permissions = Socket.getifaddrs .select { |ifa| ifa.addr.ipv4_private? } .map { |ifa| IPAddr.new(ifa.addr.ip_address + '/' + ifa.netmask.ip_address) } ... end
PS Большую часть времени вы хотите, чтобы он скулил (не хотите
config.web_console.whiny_requests = false
). Потому что это может означать, что вы работаетеweb-console
в производственной среде (чего не следует делать).источник
Если вы не хотите, чтобы это сообщение об ошибке отображалось, добавьте эту строку в development.rb.
config.web_console.whiny_requests = false
источник