为什么better_errors不能在Cloud 9 IDE上运行?



我正在 cloud9 IDE 上做一些项目,我无法让更好的错误 gem 正常工作,这真的很令人沮丧。它不需要初始化;它应该开箱即用。但是,我仍然只收到通常丑陋的红色错误页面。我应该指定它包含在我的 gemfile 中,我已经bundle install了。

如何获得更好的错误才能正常工作?我缺少安装步骤吗?

我用来让"better_errors"gem 在 Cloud9 中工作的诀窍是将 TRUSTED_IP 的值设置为我的浏览器会话连接到的计算机的公共 IP 地址。(据我所知,它与远程服务器的IP地址或Cloud9服务器地址无关。

我将概述我曾经在我的 Cloud9 工作区上"better_errors"工作的过程,从我的住宅网络上的 Chromebook ...也许它也适用于你和其他人!

  1. gem "better_errors"添加到项目 Gemfile 中的开发组。
  2. gem "binding_of_caller"添加到项目 Gemfile。
  3. 在项目 Cloud9 终端中运行 $ bundle
  4. 编辑项目 config/environment/development.rb 文件,并将以下代码行添加到 Rails.application.configure 块的末尾。

    BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP']
    
  5. 在Cloud9中创建一个新的"运行器",方法是单击"运行">"运行方式">"新运行器"。
  6. Cloud9 在新选项卡中创建一个基本的运行器文件进行修改。将此文件的内容替换为以下代码。

    {
       "cmd": [
         "bash",
         "--login",
         "-c",
         "TRUSTED_IP=XXX.XXX.XXX.XXX rails server -p $port -b $ip $args"
      ],
      "working_dir": "$project_path",
      "info": "Your code is running at \033[01;34m$url\033[00m.n\033[01;31m",
      "selector": "source.ru"
    }
    
  7. 将上述代码中的XXX.XXX.XXX.XXX替换为本地计算机的公共 IP 地址。(我使用 http://ifconfig.me/来查找分配给我的Chromebook的公共IP。
  8. 将名为 RoR.run 的运行器文件保存到项目的/.c9/runners 路径中。
  9. 使用此新运行程序启动项目服务器。单击运行>使用 > RoR运行
  10. 在运行器启动服务器后,使用 Cloud9 显示的弹出链接查看应用程序。 享受"better_errors"!

注意:我仍然没有弄清楚如何将本地计算机的外部 IP 地址自动馈送到位于 Cloud9 工作区上的 RoR.run 文件中。每次移动到新网络或我的外部 IP 地址更改时,我都会手动更新它。

警告:我实际上刚刚开始学习 RoR,所以我不知道这是否是让这个 gem 在云开发服务器/服务环境中工作的"正确"方法。我也不知道这会有多安全。我怀疑我的解决方案向解析为同一外部 IP 地址的所有计算机公开了"better_errors"浏览器内 REPL。如果您正在使用敏感的代码库/数据库,请不要实现我的解决方案。

我刚刚在 cloud9.io 中对此进行了测试,这是在 cloud9.io 中完成此操作的最简单方法:

将以下行添加到 config/environment/development.rb:

BetterErrors::Middleware.allow_ip! 'xxx.xxx.xxx.0/24'

其中 xxx.xxx.xxx 是用于连接到 cloud9.io 的本地计算机 IP 地址的前三个部分

在更好的错误问题和c0文档中有一个很好的答案。

问题:https://github.com/charliesome/better_errors/issues/318

c9 帮助https://community.c9.io/t/white-listing-remote-addr-for-better-errors-gem/4976/4

使用 Rack::Request 对象获取 IP。可以将以下代码放入视图中。

   if Rails.env.development?
     request = Rack::Request.new(env)
     puts "@@@@@@ Request IP_ADDRESS = #{request.ip}"
   end

将 IP 的最后一个象限更改为0/24。例如。

BetterErrors::Middleware.allow_ip! '76.168.69.0/24'     <--note: change the last quad to 0/24 and of course your ip address will be different than 76.168.69.xx

是的!!知道了!自然而然!这是我的解决方案:

1-与@Grokcodile描述类似:编辑项目配置/环境/开发.rb文件,并将以下代码行添加到Rails.application.configure块中。

BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP']
config.web_console.whitelisted_ips = ENV['TRUSTED_IP']

2-在Cloud9编辑~/.bashrc...

vi ~/.bashrc

添加行(输入,Alt+A):

export TRUSTED_IP='0.0.0.0/0.0.0.0'

保存它(esc,:wq)

3-像往常一样运行rails s -b $IP -p $PORT...

4-享受更好的错误!!

如果您还在虚拟机(流浪者)上处理此项目:

1-在您的VM(流浪者)编辑您的~/.bash_profile(我的情况)并添加:

export TRUSTED_IP=x.x.x.x
export PORT=3000
export IP=0.0.0.0

x.x.x.x 必须等于 ENV 的REMOTE_ADDR。(这不是像 cloud9 这样的问题,因为在我的 VM 中,IP 不会每次更改:10.0.2.2 总是适合我)。

有了这个,我现在可以使用宝石工头:foreman start在两个地方都使用 Procfile:

web: rails s -b $IP -p $PORT

这是有效的,因为全局 env 变量是在两者上设置的。

我也刚刚开始学习 RoR,所以,希望这是正确的做法,将来不会带来更多问题。

由于 Cloud9 都是基于 Web 的,因此您无法从本地主机访问它,因此默认情况下,更好的错误将不起作用。如果您查看其自述文件 (https://github.com/charliesome/better_errors) 的安全部分,您可以将以下内容添加到 config/environment/development.rb 中:

BetterErrors::Middleware.allow_ip! <ipaddress>

以便显示您的 IP 的错误页面。您可以通过点击旧错误页面的"显示环境转储"并查看"REMOTE_ADDR"来找到您的明显IP。

相关内容

  • 没有找到相关文章

最新更新