AllegroAPIは、外部APIを呼び出す/modelsディレクトリ内のクラスです。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 resultはnilではありませんが、何も保持しません。
それをデバッグして、APIを呼び出しているdo_search関数の内部から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)からの戻り値はハッシュであり、空ではなく、nilではありませんが、印刷しようとすると、何もありません。空の場所です。
編集:
すべてが適切に機能し、存在しなかった問題のデバッグに合計15時間かかるように無駄になります。なぜうまくいかなかったのかわかりませんが、文字列に変換した後、コンソールに出力できなかったので、やみくもにファイルに書き留めてみました。テキストファイルで見つけたものは何ですか?データ。コンソールのすべてを印刷できなかった理由がわかりません。