पटरियों पर "से रेंडर कंसोल को अक्षम नहीं कर सकते"


141

मैं अपने विकास के माहौल के रूप में उबंटू / योनि का उपयोग कर रहा हूं। मुझे ये संदेश रेल कंसोल पर मिल रहे हैं:

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
एहतेश चौधरी

2
विशेष रूप से वैग्रंट के लिए, ऐसा कुछ असाइनमेंट के दाईं ओर के रूप में भी अच्छा हो सकता है 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। अंत में, और यह वह समस्या थी जिसका मुझे सामना करना पड़ा, श्वेतसूची में आई त्रुटि का कारण था क्योंकि रेल एक अन्य त्रुटि को संभालने के लिए डिफ़ॉल्ट तंत्र के रूप में कंसोल को रेंडर करने की कोशिश कर रहा था। तो या तो अन्य त्रुटि को ठीक करने, या डिफ़ॉल्ट को बदलने में भी मदद करनी चाहिए।
कप्पड़

आप आमतौर पर चीजों को हार्डकोड नहीं करना चाहते हैं। मेरा जवाब देखिए ।
एक्स-यूरी

क्या मैं सभी आईपी पते को श्वेतसूची में बदल सकता हूं?
एरोन फ्रेंके

82

आप एकल आईपी या पूरे नेटवर्क को श्वेतसूची में रख सकते हैं।

कहो कि आप अपना कंसोल साझा करना चाहते हैं 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

यदि आप यह संदेश अब नहीं देखना चाहते हैं, तो इस विकल्प को गलत पर सेट करें:

class Application < Rails::Application
  config.web_console.whiny_requests = false
end

सावधान रहो, तुम क्या चाहते हो, 'क्योंकि तुम सिर्फ यह सब मिल सकता है

यह शायद केवल विकास के उद्देश्यों के लिए है इसलिए आप config/environments/development.rbइसके बजाय इसे रखना पसंद कर सकते हैं config/application.rb


मैं सिस्टम Prefs> साझाकरण के तहत OS X "कंप्यूटर नाम" सुविधा का उपयोग करता हूं और Webrick स्रोत IP को एक वर्णानुक्रमिक नाम (जैसे, myname.local: 3000) से बांधता हूं, हालांकि, जब मैं इसे श्वेत सूची में लाने का प्रयास करता हूं तो वेब्रिक शुरू नहीं होगा। कोई सुझाव?
निप्पोंसे

41

कॉन्फ़िगरेशन फ़ाइल में IP को हार्डकोड करना अच्छा नहीं है। अन्य देवों के बारे में क्या? क्या होगा अगर आईपी बदल जाए?

जब भी संभव हो डॉक-संबंधित कॉन्फ़िगरेशन रेल ऐप में लीक नहीं होना चाहिए। इसलिए आपको config/environments/development.rbफ़ाइल में env var का उपयोग करना चाहिए :

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 var सेट करने चाहिए , संस्करण नियंत्रण में ट्रैक नहीं किया जाना चाहिए ।

में 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 सेट नहीं है। कोई विचार क्या feb 22 के बाद से बदल सकता है?
डेनिस-ट्रे

आपको इसे अपने पर्यावरण फ़ाइल में स्वयं निर्दिष्ट करना चाहिए।
पाक

1
@BrianKung मेरा मानना ​​है कि यह ठीक है: .envसंस्करण नियंत्रण में जाँच नहीं की जानी चाहिए, कोई भी इसे अपने स्वयं के वातावरण में ओवरराइड कर सकता है। Docker की जानकारी ऐप में वैसे भी लीक हो जाती है, हम सिर्फ यहाँ नुकसान को कम करते हैं :)
पाक

1
बिल्कुल सही, मैंने अभी आपके उत्तर से env_fileऔर environmentविकल्पों के बारे में सीखा docker-compose.ymlहै। Ung
ब्रायन कुंग

6
DOCKERIZED-Env वैरिएबल बनाने की आवश्यकता नहीं है । डॉकर एक /.dockerenv-फाइल बनाता है , जिसे आप चेक कर सकते हैं: File.file?('/.dockerenv') => trueऔर आप एक कंटेनर के अंदर हैं।
14

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
सर्वश्रेष्ठ उत्तर - सिर्फ नया तब बाकी
जोनो

यह मेरे लिए उत्कृष्ट रूप से काम कर रहा है क्योंकि मैं एक
डॉक

व्यक्तिगत रूप से, मैं एक चुनिंदा + मानचित्र संयोजन की पठनीयता को प्राथमिकता दूंगा:config.web_console.whitelisted_ips = Socket.ip_address_list.select(&:ipv4?).map{ |addrinfo| IPAddr.new(addrinfo.ip_address).mask(24) }
एलेक्सिस

1
यह भी, यह config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']@ केवले के उत्तर से सरल से बेहतर क्यों है ?
एलेक्सिस

मैं भी जानना चाहता हूं। यह साधारण विन्यास से बेहतर क्यों है?
अनवर

14

मेरे किसी भी निजी नेटवर्क पर किसी का भी स्वागत है।

मैं एक डॉकटर कंटेनर में चलता हूं और मुझे इस सप्ताह उपयोग करने के लिए कौन सा नेटवर्क चाहिए, इसकी परवाह नहीं है।

config / environment / development.rb लाइन जोड़ें

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

7

विकास के माहौल के लिए: पता लगाएँ कि क्या यह docker है, तो 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

मेरे लिए यह निम्नलिखित प्रिंट करता है और चेतावनी this दूर हो जाती है

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और फिर इसने मेरे लिए काम किया! तो धन्यवाद!
पेड्रो पावा

3

यदि आप Docker का उपयोग कर रहे हैं, तो संभव है कि आप न तो नए ENV वैरिएबल को शुरू करना चाहते हैं और न ही अपने विशिष्ट IP पते को हार्डकोड करना चाहते हैं।

इसके बजाय आप जांच कर सकते हैं कि आप डॉकर का उपयोग कर रहे हैं /proc/1/cgroup, और अपने होस्ट आईपी (दोनों के लिए 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

मेरे लिए, 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


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

यदि आप इस त्रुटि संदेश को देखना बंद करना चाहते हैं तो आप इस लाइन को विकास में जोड़ सकते हैं

config.web_console.whiny_requests = false
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.