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也在models目录中,它是我通过运行此任务执行的文件:
namespace :data do
desc "Update auctions table in database"
task update_auctions: :environment do
Allegro.check_for_new_auctions
end
end
allegro.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)的返回值是hash,不是空的,不是nil但是当我尝试打印它时,它没什么,空的地方。
编辑:
一切都运转正常,浪费了15个小时,总共调试了不存在的问题。我不确定为什么它没有工作,但转换为字符串后无法打印到控制台,所以我尝试将其写入盲目归档。我在文本文件中找到了什么?数据。 我不知道为什么它无法打印出控制台中的所有内容。
答案 0 :(得分:0)
在您显示的IRB脚本中,您有一些不在rake任务中的puts语句。因此,对于调试,我会将put ...添加到您的Rake任务中,例如:
namespace :data do desc "Update auctions table in database" task update_auctions: :environment do puts "Start Auctions..." results = Allegro.check_for_new_auctions puts "Results: #{results}" end end
现在,当你跑:
rake data:update_auctions
你应该得到一些输出。否则,通过在您调用的方法中添加puts语句来进行冲洗和重复。