Rails에서“콘솔을 렌더링 할 수 없습니다…”비활성화하는 방법


141

개발 환경으로 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

이러한 "렌더링 할 수 없습니다 ..."메시지를 비활성화하거나 어떤 식 으로든 허용 할 수 있습니까?

답변:


182

웹 콘솔 구성에서 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단지 개발 환경에 적용되도록.


6
당신은 두 번째 줄의 내부 싶은 생각 config/environments/development.rb, @ydaetskcoR
— Ehtesh Choudhury의

2
특히 Vagrant의 경우 다음과 같은 것이 과제의 오른쪽으로도 좋습니다 ENV.fetch('SSH_CLIENT', '127.0.0.1').split(' ').first. 일반적으로 이것은 10.0.2.2 일 것입니다.하지만 활성화 된 네트워크 구성 (유란하지 않은지, 실제로-원하는지 아닌지)을 반영해야합니다.
— lindes

2
여기에는 두 가지 다른 일이 있습니다. 첫 번째는 레일이 빈 상자에서 실행될 때 로컬 시스템에서 렌더링되는 웹 콘솔입니다. 이에 의해 제어됩니다 config.web_console.whitelisted_ips. 두 번째는 로그에 표시되는 오류 메시지입니다. 이에 의해 제어됩니다 config.web_console.whiny_requests. 마지막으로 이것은 내가 직면 한 문제였습니다. 레일이 다른 오류를 처리하는 기본 메커니즘으로 콘솔을 렌더링하려고했기 때문에 화이트리스트 Ip 오류가 발생했습니다. 따라서 다른 오류를 수정하거나 기본값을 변경하면 도움이 될 것입니다.
— kapad

일반적으로 사물을 하드 코딩하고 싶지 않습니다. 내 답변을 참조하십시오 .
— x-yuri

모든 IP 주소를 허용 할 수 있습니까?
— Aaron Franke

82

단일 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.


시스템 환경 설정> 공유에서 OS X "컴퓨터 이름"기능을 사용하고 Webrick 소스 IP를 알파벳 이름 (예 : myname.local : 3000)에 바인딩하지만이 목록을 화이트리스트에 올리려고하면 Webrick이 시작되지 않습니다. 어떤 제안?
— nipponese

41

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로 남겨 두겠습니다.


내 DOCKER_HOST_IP env var가 설정되지 않았습니다. 2 월 22 일 이후로 무엇이 바뀌었을 지 아십니까?
— dennis-tra

환경 파일에 직접 지정해야합니다.
— Pak

1
@BrianKung 나는 그것이 옳다고 믿는다 : .env버전 제어에 체크인해서는 안되며, 누구나 자신의 환경에서 그것을 무시할 수 있습니다. 도커 정보가 어쨌든 응용 프로그램으로 누출되면, 우리는 여기서 손상을 최소화합니다 :)
— Pak

1
완벽합니다. 방금 귀하의 답변에서 env_file및 environment옵션에 대해 배웠습니다 docker-compose.yml. 👍
— Brian Kung

6
DOCKERIZED-env 변수 를 작성할 필요가 없습니다 . Docker는 /.dockerenv다음을 확인할 수 있는 -file을 작성 File.file?('/.dockerenv') => true하며 컨테이너 내부에 있습니다.
— jottr

20

내에서 자동 검색 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'

파일 내


2
가장 좋은 답변-나머지 새로운 것
— Jono

Docker 컨테이너에서 Rails를 실행함에 따라 이것은 훌륭하게 작동하는 것 같습니다
— FireDragon

개인적으로, 나는 선택 +지도 조합의 가독성을 선호합니다 :config.web_console.whitelisted_ips = Socket.ip_address_list.select(&:ipv4?).map{ |addrinfo| IPAddr.new(addrinfo.ip_address).mask(24) }
— Alexis

1
또한 config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']@kwerle의 답변 에서 단순한 것보다 왜 더 낫 습니까?
— Alexis

나도 알고 싶어 이것이 단순한 구성보다 나은 이유는 무엇입니까?
— Anwar

14

내 개인 네트워크에있는 사람은 누구나 환영합니다.

도커 컨테이너에서 실행하고 이번 주에 사용할 네트워크는 신경 쓰지 않습니다.

config / environments / development.rb 라인 추가

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

7

개발 환경 : 도커인지 감지 한 다음 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

내 솔루션은 결합했다


1
답변 주셔서 감사합니다! 나 에게이 코드는 다음을 반환했습니다 undefined method <<' for nil:NilClass (NoMethodError). 그래서이라는 변수를 만들고 whitelisted_ips = [ ]ips를 추가하는 루프 내부와 루프 config.web_console.whitelisted_ips = whitelisted_ips다음에 사용했습니다. 감사합니다!
— Pedro Paiva

3

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

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

이것이 모든 IP를 허용합니까? 이 코드를 어디에 넣습니까?
— Aaron Franke


1

당신은 (호스트에서) 로컬 사이트를 실행하면 이후로는 일반적으로 밖으로 작동 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

추신 : 대부분 당신이 그것을 울리 길 원합니다 (하고 싶지 않아요 config.web_console.whiny_requests = false). web-console프로덕션 환경에서 실행 중임 을 의미 할 수 있습니다 (그렇지 않아야 함).


0

이 오류 메시지가 더 이상 표시되지 않게하려면 development.rb 에이 줄을 추가하면됩니다.

config.web_console.whiny_requests = false
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.