কীভাবে রেলগুলিতে "কনসোল রেন্ডার করতে পারবেন না ..." অক্ষম করবেন


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, @ ইয়াদেটসকোআর
এহতেশ চৌধুরী

2
বিশেষ করে দ্য ভাগ্রান্ট জন্য ভালো কিছু এছাড়াও নিয়োগ ডান দিকে হিসাবে ভাল হতে পারে: ENV.fetch('SSH_CLIENT', '127.0.0.1').split(' ').first। সাধারণভাবে, এটি সম্ভবত 10.0.2.2 হবে, তবে এটি যে কোনও নেটওয়ার্ক কনফিগারেশন সক্রিয় রয়েছে তা প্রতিবিম্বিত করা উচিত (অস্পষ্ট বা না, সত্যিই - অবশ্যই আপনি কোনটি চান বা নাও করতে পারেন)।
লিন্ডস

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


আমি সিস্টেম প্রেফস> এর মধ্যে ওএস এক্স "কম্পিউটারের নাম" বৈশিষ্ট্যটি ব্যবহার করি এবং ওয়েব্রিক উত্স আইপিটিকে বর্ণানুক্রমিক নামের (যেমন, মাইনেম.লোকাল: 3000) এর সাথে যুক্ত করে এবং বাঁধাই করি, তবে, আমি যখন এটি সাদা করার জন্য চেষ্টা করব তখন ওয়েব্রিক শুরু হবে না। কোনও পরামর্শ?
নিপোনস

41

একটি কনফিগারেশন ফাইলে আইপি হার্ডকডিং ভাল নয়। অন্যান্য ডিভসের কী হবে? আইপি পরিবর্তন হলে কী হবে?

ডকার-সম্পর্কিত কনফিগারেশনটি যখনই সম্ভব হবে তখন রেল অ্যাপগুলিতে ফাঁস হওয়া উচিত নয়। এজন্য আপনার 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 উদ্বুদ্ধ করতে পারেন এই ফাইল থেকে Vars 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 ভার সেট করা নেই। 22 শে ফেব্রুয়ারির পরে কী কী পরিবর্তন হতে পারে?
ডেনিস-ট্র

আপনার নিজের পরিবেশ ফাইলটিতে এটি নির্দিষ্ট করা উচিত।
পাক

1
@ ব্রায়ানকুং আমি বিশ্বাস করি যে এটি ঠিক আছে: .envসংস্করণ নিয়ন্ত্রণে পরীক্ষা করা উচিত নয়, যে কেউ নিজের পরিবেশে এটিকে ওভাররাইড করতে পারে। ডকার তথ্য যেভাবেই অ্যাপ্লিকেশনটিতে ফাঁস হয়, আমরা কেবল ক্ষয়টি এখানে কমিয়ে
পাক

1
পারফেক্ট, আমি শুধু সম্পর্কে শিখেছি env_fileএবং environmentবিকল্প docker-compose.ymlআপনার উত্তর থেকে, খুব। 👍
ব্রায়ান কুং

6
DOCKERIZED-Env ভেরিয়েবলটি তৈরি করার দরকার নেই । ডকার একটি- /.dockerenvফাইল তৈরি করে , যা আপনি যাচাই করতে পারেন: 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
সেরা উত্তর - কেবলমাত্র তারপরে আরও নতুন
জোনো

এটি আমার পক্ষে দুর্দান্তভাবে কাজ করছে বলে মনে হচ্ছে যেহেতু আমি ডকার পাত্রে
রেলগুলি চালাচ্ছি

ব্যক্তিগতভাবে, আমি একটি নির্বাচিত + মানচিত্রের সংমিশ্রণের পাঠযোগ্যতা পছন্দ করব: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.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']

7

বিকাশের পরিবেশের জন্য: এটি ডক কিনা তা সনাক্ত করুন, তারপরে আইপি ঠিকানাটি নির্ধারণ করুন এবং এটি শ্বেতলিস্ট করুন

# 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 = [ ], এটি লুপের ভিতরে আইপস যুক্ত করে এবং লুপের পরে config.web_console.whitelisted_ips = whitelisted_ipsব্যবহার করেছি : এবং তারপরে এটি আমার পক্ষে কাজ করেছিল! সূতরাং ধন্যবাদ!
পেড্রো পাইভা

3

আপনি যদি ডকার ব্যবহার করছেন তবে সম্ভবত আপনি নতুন ENV ভেরিয়েবল প্রবর্তন করতে পারবেন না বা আপনার নির্দিষ্ট আইপি ঠিকানাটি হার্ডকোড করতে চান না।

পরিবর্তে আপনি যে ডকার ব্যবহার করছেন তা পরীক্ষা করতে /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কোনও নতুন প্রকল্পে কাজ করার কথা মনে হচ্ছে না। রিডমে উল্লেখ করেছে যে সংশ্লিষ্ট কনফিগারেশন এন্ট্রিটি 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

আপনি এই লাইন যোগ করতে পারেন এই ত্রুটি বার্তা দেখা বন্ধ করতে চান তাহলে development.rb

config.web_console.whiny_requests = false
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.