我使用Ubuntu / vagrant作为我的开发环境。 我在rails console上收到这些消息:
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
是否可以禁用那些"无法渲染......"消息或以任何方式允许它们?
答案 0 :(得分:147)
您需要在Web控制台配置中将10.0.2.2网络空间列入白名单。
所以你会想要这样的东西:
class Application < Rails::Application
config.web_console.whitelisted_ips = '10.0.2.2'
end
阅读here了解详情。
pointed out作为pguardiario,这需要进入config/environments/development.rb
而不是config/application.rb
,因此它仅适用于您的开发环境。
答案 1 :(得分:73)
假设您要与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
下。
答案 2 :(得分:29)
将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
文件中设置正确的env vars,而不是跟踪到版本控制。
在docker-compose.yml
中,您可以使用env_file
从此文件中注入env变种:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
links:
- db
environment:
- DOCKERIZED=true
env_file:
- ".env"
答案 3 :(得分:17)
在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'
在您的档案中。
答案 4 :(得分:7)
我的任何私人网络都欢迎任何人。
我在一个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']
答案 5 :(得分:3)
对于开发环境:检测它是否为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
我的解决方案是结合
答案 6 :(得分:2)
请注意,只会使用最后一个 'config.web_console.whitelisted_ips'。所以
config.web_console.whitelisted_ips = '10.0.2.2'
config.web_console.whitelisted_ips = '192.168.0.0/16'
只会将 192.168.0.0/16 列入白名单,而不是 10.0.2.2。
改为使用:
config.web_console.whitelisted_ips = ['10.0.2.2', '192.168.0.0/16']
答案 7 :(得分:1)
如果您使用的是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
答案 8 :(得分:1)
如果您在本地(在主机上)运行站点,则通常可以正常运行,因为Public Sub ChangeSomething()
Dim btn As Shape
With Application
'Check for correct data types.
If Not TypeOf .ActiveSheet Is Worksheet Then Exit Sub
If IsObject(.Caller) Then Exit Sub
'Acquire button
On Error Resume Next
Set btn = .ActiveSheet.Shapes(.Caller)
On Error GoTo 0
'Check for a found button
If btn Is Nothing Then Exit Sub
End With
'Check for non-actionable button.
With btn.TextFrame.Characters
If .Count = 0 Then
.Text = "x"
Exit Sub
End If
End With
'If we've reached here, it's an actionable button.
Debug.Print "Do something."
'Clear the button text.
btn.TextFrame.Characters.Text = ""
End Sub
是always permitted。但是,如果要将站点放入容器中(而不是在生产环境中,而是在本地),则可能要将其添加到127.0.0.1
中:
config/environments/development.rb
P.S。大多数情况下,您希望它发牢骚(不想做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
(不应该这样做)。
答案 9 :(得分:0)
如果您想停止看到此错误消息,可以在 development.rb
中添加此行config.web_console.whiny_requests = false
答案 10 :(得分:0)
对我来说,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
答案 11 :(得分:0)
我只想添加此内容,因为我自己的错误导致我也遇到了同样的错误。
我从控制器中错过了这个
<div class="hero">
<h1>Intro block to be fixed position and under all other content. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non orci eu odio suscipit sagittis. Sed vitae pretium sapien, vitae facilisis tellus. Praesent gravida interdum quam, id accumsan ex congue quis.
</h1>
</div>
<div class="block">
<h2>Second block to be position below the hero block and overlay on scroll. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus non orci eu odio suscipit sagittis. Sed vitae pretium sapien, vitae facilisis tellus. Praesent gravida interdum quam, id accumsan ex congue quis.
</h2>
</div>
基本上,我正在使用cancancan在该路由上放置授权,这导致404返回。我看到了这个消息,并假设两者是相关的,而实际上它们并没有
load_and_authorize_resource except: [:payment_webhook]
因此,如果收到错误消息,则可能与您看到的Cannot render console from xxxxxx Allowed networks: xxxxx
无关-寻找其他问题!
答案 12 :(得分:-1)
class Application < Rails::Application
config.web_console.whitelisted_ips = %w( 0.0.0.0/0 ::/0 )
end