Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 为什么';在cloud 9 ide上工作不是更好吗?_Ruby On Rails 4_Cloud9 Ide_Better Errors Gem - Fatal编程技术网

Ruby on rails 4 为什么';在cloud 9 ide上工作不是更好吗?

Ruby on rails 4 为什么';在cloud 9 ide上工作不是更好吗?,ruby-on-rails-4,cloud9-ide,better-errors-gem,Ruby On Rails 4,Cloud9 Ide,Better Errors Gem,我在Cloud9IDE上做了很多项目,但我无法让更好的错误gem正常工作,这真是令人沮丧。它不需要初始化;它应该是开箱即用的。然而,我仍然只看到通常的丑陋的红色错误页面。我应该指定它包含在我的GEM文件中,并且我已经安装了bundle 如何获得更好的错误以正确工作?我缺少安装步骤吗?因为Cloud9都是基于web的,您不能从localhost访问它,所以默认情况下,更好的错误不会起作用。如果查看其自述文件()的安全部分,可以将以下内容添加到config/environments/developm

我在Cloud9IDE上做了很多项目,但我无法让更好的错误gem正常工作,这真是令人沮丧。它不需要初始化;它应该是开箱即用的。然而,我仍然只看到通常的丑陋的红色错误页面。我应该指定它包含在我的GEM文件中,并且我已经安装了
bundle


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

因为Cloud9都是基于web的,您不能从localhost访问它,所以默认情况下,更好的错误不会起作用。如果查看其自述文件()的安全部分,可以将以下内容添加到config/environments/development.rb中:

BetterErrors::Middleware.allow_ip! <ipaddress>
BetterErrors::Middleware.allow_ip! 'xxx.xxx.xxx.0/24'
BetterErrors::Middleware.allow\u ip!

因此,错误页面显示您的IP。你可以通过点击旧错误页面的“Show env dump”并查看“REMOTE_ADDR”来找到你的明显IP。

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

我将从住宅网络上的Chromebook概述我在Cloud9工作区中获得“更好的错误”的过程。。。也许它也会对你和其他人有用

  • gem“better\u errors”
    添加到项目文件中的开发组
  • gem“绑定调用方”
    添加到项目文件中
  • 在project Cloud9终端中运行$
    bundle
  • 编辑项目config/environments/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地址。(我使用查找分配给Chromebook的公共IP。)
  • 将名为RoR.run的runner文件保存到项目的/.c9/runners路径中
  • 使用此新运行程序启动Project server。单击运行使用RoR运行
  • 运行程序启动服务器后,使用Cloud9显示的弹出链接查看应用程序。享受“更好的错误” 注意:我还没有弄清楚如何将本地计算机的外部IP地址自动输入Cloud9工作区中的RoR.run文件。我只是在每次移动到新网络或更改外部IP地址时手动更新它


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

    我刚刚在cloud9.io中测试了这一点,这是在cloud9.io中实现这一点的最简单方法:

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

    BetterErrors::Middleware.allow_ip! <ipaddress>
    
    BetterErrors::Middleware.allow_ip! 'xxx.xxx.xxx.0/24'
    

    其中xxx.xxx.xxx是用于连接到cloud9.io的本地计算机IP地址的前三个部分。在better errors issues和c0 docs中有一个很好的答案

    问题:

    c9帮助

    使用
    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
    

    BetterErrors::Middleware.allow_ip!'76.168.69.0/24'是的!!我得到了它!自动地
    以下是我的解决方案:

    1-与@Grokcodile所述类似:编辑project 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):

    保存它(esc,:wq)

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

    4-享受更好的错误

    如果您也在虚拟机(vagrant)上处理此项目:

    1-在虚拟机(vagrant)上编辑~/.bash_档案(我的案例),并添加:

    x、 x.x.x必须等于ENV的远程地址。(这不像cloud9那样是一个问题,因为在我的虚拟机上,IP不会每次都改变:10.0.2.2总是适合我)

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

    web: rails s -b $IP -p $PORT
    
    这是因为全局环境变量是在这两个节点上设置的


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

    我正在使用2.0.0版。我添加了您上面提到的行,我用一个包含我的ip
    “xx.xx.xx.xx”
    的字符串替换了
    ,我没有得到任何更改。重新启动服务器后仍显示标准错误页。我没有主意了。也许值得给他发封电子邮件support@c9.io所以他们可以诊断为什么它不工作。我还喜欢在处理Cloud9时在路由错误页面上显示控制台。为此,我将
    config.web\u console.whitelisted\u ips=ENV['TRUSTED\u IP']
    添加到我的projects config/environments/development.rb文件中。