22

ブロガーのラベルを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ジョブを初めて実行すると、ラベルデータが保存され、そのエラーが発生することもあります。データを更新できませんでした。

4

1 に答える 1

43

ここで説明したのと同じ問題があると思います: datamapper で "all" メソッドを試すとエラーが発生します

あなたの場合、Sinatra は @lavels.update の戻り値を取得し、それを文字列に変換してユーザーに表示しようとしています。

これを試して、問題が解決するかどうかを確認してください。

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

戻り値は文字列になっているため、エラーは発生しません。

于 2009-07-14T06:59:17.827 に答える