如何禁用"无法从......渲染控制台"在Rails上

时间:2015-04-02 15:57:24

标签: ruby-on-rails vagrant

我使用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

是否可以禁用那些"无法渲染......"消息或以任何方式允许它们?

13 个答案:

答案 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)

您可以将单个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下。

答案 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_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

答案 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