Question

Je voudrais stocker et mettre à jour les étiquettes blogueur à datastore GAE. Quand je lance ce code, je reçois cette erreur:

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)

Le code

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

et géré par cron job fait '/ travail'

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

Où est le problème? S'il vous plaît me enseigner.

Mais lorsqu'il est exécuté première fois tâche Cron, les données de l'étiquette a été enregistrée, se produire même cette erreur. Impossible de mettre à jour les données.

Était-ce utile?

La solution

Je pense que votre avoir le même problème qui a été discuté ici: erreur se produit lorsque je tente méthode « tous » dans DataMapper

Dans votre cas, Sinatra tente de prendre la valeur de retour de @ lavels.update et le transformer en une chaîne à afficher à l'utilisateur.

Essayez ceci pour voir si elle résout le problème:

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

Votre valeur de retour est maintenant une chaîne, donc vous ne devriez pas obtenir l'erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top