[ruby-on-rails] Rails에서“콘솔을 렌더링 할 수 없습니다…”비활성화하는 방법
개발 환경으로 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
이러한 “렌더링 할 수 없습니다 …”메시지를 비활성화하거나 어떤 식 으로든 허용 할 수 있습니까?
답변
웹 콘솔 구성에서 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
단지 개발 환경에 적용되도록.
답변
단일 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
버전 관리를 추적하지 않고 파일 에 올바른 환경 변수를 설정해야합니다 .
에서 docker-compose.yml
당신이 ENV 주입 할 수있는 것은이 파일에서 바르 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로 남겨 두겠습니다.
답변
내에서 자동 검색 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 / environments / 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
내 솔루션은 결합했다
- user2481743의 답변 ⭐️ https://stackoverflow.com/a/42142563/2037928
- ⭐️ jottr의 코멘트는 어떻게 사용하지 않으려면 “에서 콘솔을 렌더링 할 수 없습니다 …”레일에
답변
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