Undefined метод `bytesize 'для # <Hash>
Я хотел бы хранить и обновлять ярлыки blogger в хранилище данных в 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 данные метки были сохранены, даже произошла ошибка.
Не удалось обновить данные.
Ответы
Ответ 1
Я думаю, что у вас такая же проблема, что и обсуждалась здесь: ошибка возникает, когда я пытаюсь "all" метод в datamapper
В вашем случае Sinatra пытается взять возвращаемое значение @lavels.update и превратить его в строку, отображаемую пользователю.
Попробуйте это, чтобы узнать, исправляет ли он проблему:
get '/job' do
@labels = Labels.new
@labels.update
"Labels Updated"
end
Ваше возвращаемое значение теперь является строкой, поэтому вы не должны получать ошибку.