4

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

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

4

5 回答 5

5

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

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

  1. 添加gem "better_errors"到项目 Gemfile 中的开发组。
  2. 添加gem "binding_of_caller"到项目 Gemfile。
  3. bundle在项目 Cloud9 终端中运行 $ 。
  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. 使用这个新的运行器启动项目服务器。单击运行>运行方式> RoR
  10. 在运行器启动服务器后,使用 Cloud9 显示的弹出链接来查看应用程序。享受“更好的错误”!

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

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

于 2015-03-26T07:09:22.050 回答
2

在更好的错误问题和 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
于 2016-09-02T19:24:00.387 回答
2

是的!!我知道了!自动地!这是我的解决方案:

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-享受更好的错误!

如果您还在虚拟机(vagrant)上从事此项目:

1-在您的VM(vagrant)上编辑您的〜/ .bash_profile(我的情况)并添加:

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

xxxx 必须等于 ENV 的 REMOTE_ADDR。(这不像 cloud9 这样的问题,因为在我的 VM 上,IP 不会每次都改变:10.0.2.2 对我来说总是如此)。

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

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

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

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

于 2017-01-13T11:14:41.020 回答
2

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

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

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

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

于 2016-09-01T17:55:29.210 回答
0

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

BetterErrors::Middleware.allow_ip! <ipaddress>

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

于 2014-11-25T06:53:40.260 回答