【问题标题】:Why doesn't better_errors work on cloud 9 ide?为什么 better_errors 在 cloud 9 ide 上不起作用?
【发布时间】:2015-01-22 21:49:27
【问题描述】:

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

如何获得更好的错误以正常工作?有没有我遗漏的安装步骤?

【问题讨论】:

  • 我使用的是 2.0.0 版

标签: ruby-on-rails-4 cloud9-ide better-errors-gem


【解决方案1】:

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

我将概述在我的住宅网络上的 Chromebook 上使用我的 Cloud9 工作区运行“better_errors”的过程......也许它也适用于你和其他人!

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

    BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP']
    
  5. 点击“Run” > “Run With” > “New Runner”,在 Cloud9 中创建一个新的“runner”。。李>
  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. 使用这个新的运行器启动项目服务器。点击Run > Run With > RoR
  10. 在运行器启动服务器后,使用 Cloud9 显示的弹出链接来查看应用程序。享受“更好的错误”!

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

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

【讨论】:

  • 我还喜欢在使用 Cloud9 时在路由错误页面上显示控制台。为此,我将 config.web_console.whitelisted_ips = ENV['TRUSTED_IP'] 添加到我的项目 config/environments/development.rb 文件中。
【解决方案2】:

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

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

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

其中 xxx.xxx.xxx 是您用来连接到 cloud9.io 的 本地 机器的 IP 地址的前三个部分

【讨论】:

    【解决方案3】:

    在更好的错误问题和 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
    

    【讨论】:

      【解决方案4】:

      是的!我得到了它!自动地! 这是我的解决方案:

      1- 与@Grokcodile 描述的类似:编辑项目 config/environments/development.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- 在您的虚拟机(流浪者)上编辑您的 ~/.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 对我来说总是如此)。

      有了这个,我现在可以在 Procfile 的两个地方使用 gem foreman:foreman start

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

      这是可行的,因为在两者上都设置了全局环境变量。

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

      【讨论】:

        【解决方案5】:

        因为 Cloud9 都是基于 Web 的,所以您不能从 localhost 访问它,所以默认情况下更好的错误不会起作用。如果您查看他们的 README (https://github.com/charliesome/better_errors) 的安全部分,您​​可以将以下内容添加到 config/environments/development.rb:

        BetterErrors::Middleware.allow_ip! <ipaddress>
        

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

        【讨论】:

        • 我添加了您上面提到的行,并将&lt;ipaddress&gt; 替换为包含我的ip "xx.xx.xx.xx" 的字符串,但没有任何更改。重启服务器后仍然显示标准错误页面。
        • 我没主意了。可能值得向 support@c9.io 发送电子邮件,这样他们就可以诊断出它为什么不起作用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 1970-01-01
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        相关资源
        最近更新 更多