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_fileenvironment옵션에 대해 배웠습니다 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_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

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.