【问题标题】:Issues with Sinatra and HerokuSinatra 和 Heroku 的问题
【发布时间】:2010-08-07 09:47:59
【问题描述】:

所以我创建了一个 Sinatra 应用程序并将其发布到 Heroku,没有任何问题。我什至在本地使用 rackup 对其进行了测试,以确保它运行良好。从 URL 中消费一个邮政编码后,有一系列 API 调用到各个地方,但 Heroku 只是想告诉我有一个服务器错误。

我添加了一个错误页面,试图给我更多的描述,但是,它告诉我它不能对 # 执行“计数”,我认为这意味着哈希。这是我认为它正在尝试执行的代码...

if weather_doc.root.elements["weather"].children.count > 1
  curr_temp = weather_doc.root.elements["weather/current_conditions/temp_f"].attributes["data"]
else
  raise error(404, "Not A Valid Zip Code!")
end

如果有人想尝试一下,可以通过http://quiet-journey-14.heroku.com/ 联系到它,但是没有太多东西可供选择。

【问题讨论】:

    标签: ruby sinatra heroku


    【解决方案1】:

    Hash 没有count 方法。它有一个length 方法。如果# 确实引用了一个哈希对象,那么问题是你调用了一个不存在的方法。

    【讨论】:

      【解决方案2】:

      那个#不是指Hash,它是#<Array:0x2b2080a3e028>的第一个字符。 <> 之间的部分在浏览器中不显示(隐藏标签本身),但在查看源代码中可见。

      您真正的问题与 Ruby 无关,而是与您在 HTML 或 XML 文档中的导航(通过 DOM)有关。你的陈述

      weather_doc.root.elements["weather"].children.count > 1

      浏览 HTML/XML 文档,选择“天气”元素,并(尝试)计算子元素。 children 调用的结果没有方法 count。请改用length

      顺便说一句,您确定该文档包含标签<weather>?因为这就是您要选择的内容。

      【讨论】:

      • “天气”元素确实存在,这是从 Google 天气 API 返回的 XML。这很奇怪,因为这个完全相同的代码可以在我的机器上本地运行而没有问题。不过我会试一试,谢谢!
      • 在更改为 .length 并推送到 heroku 后,我现在收到“未给出块”错误。我只需要深入研究一下,再次感谢!
      • 您使用哪个 XML 解析器来导航 DOM? REXML,Nokogiri?可能是您的 Heroku 应用程序中没有安装相应的 gem。您可以提供纯文本 .gems 文件让 Heroku 安装您需要的 gem。见http://docs.heroku.com/gems。顺便说一句,REXML 的 children 返回一个数组,其中有 lengthsize 方法。
      【解决方案3】:

      如果你想看看#后面是什么,试试

      raise probably_hash.class.to_s

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        相关资源
        最近更新 更多