我正在 cloud9 IDE 上做一些项目,我无法让更好的错误 gem 正常工作,这真的很令人沮丧。它不需要初始化;它应该开箱即用。但是,我仍然只收到通常丑陋的红色错误页面。我应该指定它包含在我的 gemfile 中,我已经bundle install
了。
如何获得更好的错误才能正常工作?我缺少安装步骤吗?
我用来让"better_errors"gem 在 Cloud9 中工作的诀窍是将 TRUSTED_IP
的值设置为我的浏览器会话连接到的计算机的公共 IP 地址。(据我所知,它与远程服务器的IP地址或Cloud9服务器地址无关。
我将概述我曾经在我的 Cloud9 工作区上"better_errors"工作的过程,从我的住宅网络上的 Chromebook ...也许它也适用于你和其他人!
- 将
gem "better_errors"
添加到项目 Gemfile 中的开发组。 - 将
gem "binding_of_caller"
添加到项目 Gemfile。 - 在项目 Cloud9 终端中运行 $
bundle
。 -
编辑项目 config/environment/development.rb 文件,并将以下代码行添加到 Rails.application.configure 块的末尾。
BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP']
- 在Cloud9中创建一个新的"运行器",方法是单击"运行">"运行方式">"新运行器"。
-
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" }
- 将上述代码中的
XXX.XXX.XXX.XXX
替换为本地计算机的公共 IP 地址。(我使用 http://ifconfig.me/来查找分配给我的Chromebook的公共IP。 - 将名为 RoR.run 的运行器文件保存到项目的/.c9/runners 路径中。
- 使用此新运行程序启动项目服务器。单击运行>使用 > RoR运行。
- 在运行器启动服务器后,使用 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。