[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

내 솔루션은 결합했다


답변

Docker를 사용하는 경우 새로운 ENV 변수를 도입하거나 특정 IP 주소를 하드 코딩하지 않으려 할 것입니다.

대신을 사용하여 Docker에 있는지 확인하고 /proc/1/cgroup호스트 IP ( web_consolebetter_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