0

AllegroAPI 是 /models 目录中调用外部 API 的类。当我在其他地方而不是通过运行 rake 任务进行测试时,它可以按我的意愿工作。

示例工作代码:

require "./AllegroAPI"

allegro = AllegroAPI.new(login: 'LOGIN', 
                      password: File.read('XXXX.txt'),
                      webapikey: File.read('XXX.txt')
                    )
puts allegro.do_search({"search-string"=>"nokia", 
                        "search-price-from"=>300.0, 
                        "search-price-to"=>500.0, 
                        "search-limit"=>50}).to_s

正如我所说,它工作正常。它调用 API 并打印出结果。

文件 allegro.rb 也在模型目录中,它是我通过运行此任务执行的文件:

namespace :data do
  desc "Update auctions table in database"
  task update_auctions: :environment do
    Allegro.check_for_new_auctions
  end
end

快板.rb:

module Allegro
  require 'AllegroAPI'
  def self.check_for_new_auctions
    allegro = AllegroAPI.new(login: 'LOGIN', 
                      password: File.read('app/models/ignore/XXXX.txt'),
                      webapikey: File.read('app/models/ignore/XXX.txt')
                    )
    looks = Look.all
    looks.each do |l|
      hash_to_ask = ActiveSupport::JSON.decode(l[:look_query]).symbolize_keys
      hash_to_ask = hash_to_ask.each_with_object({}) do |(k,v), h|
        if v.is_number?
          h[k.to_s.split('_').join('-')] = v.to_f
        else
          h[k.to_s.split('_').join('-')] = v 
        end
      end
      results = allegro.do_search(hash_to_ask)
      #do something with data 
    end
  end
end

问题是它不返回任何东西。var 结果不是 nil,但它不包含任何内容。

当我尝试调试它并从内部 do_search 函数调用 API 时,它正在调用 API,不会引发错误,但响应什么都不是。AllegroAPI 工作正常。var "hash_to_ask" 没有问题,它与工作示例中的哈希完全相同。

编辑:

我已经注释掉了 check_for_new_auctions 并使用了“puts”,当我通过执行 rake 任务运行它时它工作正常。然后我使用了与正常文件中使用的代码完全相同的代码:

class Allegro
  def self.check_for_new_auctions
    allegro = AllegroAPI.new(login: 'LOGIN', 
                      password: File.read('app/models/ignore/XXXX.txt'),
                      webapikey: File.read('app/models/ignore/XXXX.txt')
                    )
    hash_to_ask = {"search-string"=>"nokia", 
                   "search-price-from"=>300.0, 
                   "search-price-to"=>500.0, 
                   "search-limit"=>50}
    allegro.do_search(hash_to_ask).to_s
  end
end

它没有工作;/ allegro.do_search(hash_to_ask) 的返回值是哈希,不是空的,不是零但是当我尝试打印它时,它什么都不是,空的地方。

编辑:

一切正常,浪费了 15 个小时,总共调试了不存在的问题。我不知道为什么它没有工作,但它在转换为字符串后无法打印到控制台,所以我试着把它写下来盲目地归档。我在文本文件中找到了什么?数据。我不知道为什么它无法在控制台中打印出所有内容。

4

1 回答 1

0

在您显示的 IRB 脚本中,您有一些 puts 语句不在您的 rake 任务中。因此,为了调试,我会将 puts ... 添加到您的 Rake 任务中,例如:

命名空间:数据做
  desc "更新数据库中的拍卖表"
  任务 update_auctions: :environment do
    放“开始拍卖......”
    结果 = Allegro.check_for_new_auctions
    提出“结果:#{results}”
  结尾
结尾

现在,当您运行时:

rake data:update_auctions

你应该得到一些输出。否则,通过在您调用的方法中添加 puts 语句来冲洗并重复。

于 2013-02-06T09:46:08.067 回答