【问题标题】:Undefined method `bytesize' for #<Hash>#<Hash> 的未定义方法 `bytesize'
【发布时间】:2010-11-10 13:18:24
【问题描述】:

我想将博客标签存储并更新到 GAE 中的数据存储区。 当我运行该代码时,我收到此错误:

javax.servlet.ServletContext log: Application Error
/base/data/home/apps/yet-another-problem/1.334886515480009498/WEB-INF/gems/gems/sinatra-0.9.2/lib/sinatra/base.rb:45:in `each': undefined method `bytesize' for #<Hash:0x86684c> (NoMethodError)

代码

class Labels
   class LabelData
    include Bumble
    ds :blog_element_labels
   end

  def update
    response = URLFetch.get($label_url)
    result = response.to_s
    result_headless = result.gsub("listLabels(",'')
    pure_result = result_headless.gsub(");",'')
    json_to_yaml = YAML::load(pure_result)['entry']['category']

    json_to_yaml.each do |label|
    @label = LabelData.find(:blog_element_labels => label['term'])
    @label = LabelData.create(:blog_element_labels => label['term']) if @label.nil?
    end
  end
end

并由 cron 作业运行 '/job'

get '/job' do
  @labels = Labels.new
  @labels.update
end

问题出在哪里?请教我。

但是第一次运行cron作业时,标签数据被存储,甚至出现错误。 无法更新数据。

【问题讨论】:

    标签: ruby google-app-engine jruby sinatra


    【解决方案1】:

    我认为您遇到的问题与此处讨论的相同:error happens when I try "all" method in datamapper

    在您的情况下,Sinatra 正在尝试获取 @lavels.update 的返回值并将其转换为字符串以显示给用户。

    试试这个看看能不能解决问题:

    get '/job' do
      @labels = Labels.new
      @labels.update
      "Labels Updated"
    end
    

    你的返回值现在是一个字符串,所以你不应该得到错误。

    【讨论】:

    • 非常感谢!修复和工作!感谢您的光速答案。
    • @tknv,如果它解决了您的问题,您应该将此答案标记为已接受,以便卢克获得声誉。
    • @Peter,抱歉耽搁了,真的很难找到在哪里以及如何接受。我试图找到一些接受按钮,但没有。
    • 谢谢!你也解决了我的问题! :)
    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2011-08-24
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多