我正在 cloud9 IDE 上处理许多项目,我无法让更好的错误 gem 正常工作,这真的很令人沮丧。它不应该需要初始化;它应该开箱即用。但是,我仍然只得到通常丑陋的红色错误页面。我应该指定它包含在我的 gemfile 中,而且我已经这样做bundle install
了。
如何获得更好的错误以正常工作?我缺少安装步骤吗?
我正在 cloud9 IDE 上处理许多项目,我无法让更好的错误 gem 正常工作,这真的很令人沮丧。它不应该需要初始化;它应该开箱即用。但是,我仍然只得到通常丑陋的红色错误页面。我应该指定它包含在我的 gemfile 中,而且我已经这样做bundle install
了。
如何获得更好的错误以正常工作?我缺少安装步骤吗?
我用来让“better_errors”gem 在 Cloud9 中工作的技巧是将 的值设置为TRUSTED_IP
我的浏览器会话所连接的计算机的公共 IP 地址。(据我所知,它与远程服务器的 IP 地址或 Cloud9 服务器地址无关。)
我将概述我用来让“better_errors”在我的 Cloud9 工作区上工作的过程,从我的住宅网络上的 Chromebook ......也许它也适用于你和其他人!
gem "better_errors"
到项目 Gemfile 中的开发组。gem "binding_of_caller"
到项目 Gemfile。bundle
在项目 Cloud9 终端中运行 $ 。编辑项目config/environments/development.rb文件并将以下代码行添加到Rails.application.configure块的末尾。
BetterErrors::Middleware.allow_ip! ENV['TRUSTED_IP'] if ENV['TRUSTED_IP']
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。)注意:我还没有弄清楚如何自动将本地计算机的外部 IP 地址输入到位于 Cloud9 工作区的 RoR.run 文件中。每次移动到新网络或外部 IP 地址更改时,我都会手动更新它。
警告:我实际上刚刚开始学习 RoR,所以我不知道这是否是让这个 gem 在云开发服务器/服务环境中工作的“正确”方法。我也不知道这有多安全。我怀疑我的解决方案会将浏览器中的“better_errors”REPL 暴露给解析到相同外部 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 描述的类似:编辑项目 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,所以,希望这是正确的做法,不会在未来带来更多问题。
我刚刚在 cloud9.io 中对此进行了测试,这是在 cloud9.io 中进行这项工作的最简单方法:
将以下行添加到 config/environments/development.rb:
BetterErrors::Middleware.allow_ip! 'xxx.xxx.xxx.0/24'
其中 xxx.xxx.xxx 是您用于连接到 cloud9.io的本地计算机IP 地址的前三个部分
因为 Cloud9 都是基于 Web 的,所以你不能从 localhost 访问它,所以默认情况下更好的错误不会起作用。如果您查看他们的 README ( https://github.com/charliesome/better_errors ) 的安全部分,您可以将以下内容添加到 config/environments/development.rb:
BetterErrors::Middleware.allow_ip! <ipaddress>
以便为您的 IP 显示错误页面。您可以通过点击旧错误页面的“显示环境转储”并查看“REMOTE_ADDR”来找到您的明显 IP。