開発環境としてUbuntu/vagrantを使用しています。 Railsコンソールでこれらのメッセージを取得しています:
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
これらの「レンダリングできません...」メッセージを無効にしたり、何らかの方法で許可したりすることは可能ですか?
Webコンソールの設定で10.0.2.2ネットワークスペースをホワイトリストに登録する必要があります。
したがって、次のようなものが必要になります。
class Application < Rails::Application
config.web_console.whitelisted_ips = '10.0.2.2'
end
詳細については、 here をお読みください。
指摘 by pguardiario のように、これはconfig/environments/development.rb
ではなくconfig/application.rb
に入りたいので、開発環境でのみ適用されます。
コンソールを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
の下に配置することをお勧めします。
IPを構成ファイルにハードコーディングすることは適切ではありません。他の開発者はどうですか? IPが変更された場合はどうなりますか?
Docker関連の構成は、可能な限りRailsアプリにリークしないようにしてください。そのため、config/environments/development.rb
ファイルでenv変数を使用する必要があります。
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変数を設定する必要があります。
docker-compose.yml
では、env_file
を使用してこのファイルからenv変数を注入できます。
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
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'
ファイル内。
プライベートネットワークの誰でも歓迎します。
Dockerコンテナで実行し、今週どのネットワークを使用するかは気にしません。
config/environments/development.rb行を追加
config.web_console.whitelisted_ips = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']
開発環境の場合: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
私にとってこれは次を印刷し、警告は消えますか????
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アドレスをハードコーディングしたりしないでください。
代わりに、/proc/1/cgroup
を使用してDockerにいることを確認し、ホスト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
私にとって、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
このエラーメッセージを表示したくない場合は、この行をdevelopment.rbに追加できます。
config.web_console.whiny_requests = false