0

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時間かかるように無駄になります。なぜうまくいかなかったのかわかりませんが、文字列に変換した後、コンソールに出力できなかったので、やみくもにファイルに書き留めてみました。テキストファイルで見つけたものは何ですか?データ。コンソールのすべてを印刷できなかった理由がわかりません。

4

1 に答える 1

0

表示するIRBスクリプトには、rakeタスクに含まれていないputsステートメントがいくつかあります。したがって、デバッグのために、Rakeタスクにputs...を追加します。例:

名前空間:data do
  desc「データベースのオークションテーブルを更新する」
  task update_auctions::environment do
    「オークション開始...」
    結果=Allegro.check_for_new_auctions
    「結果:#{結果}」を置きます
  終わり
終わり

さて、あなたが走るとき:

rake data:update_auctions

いくつかの出力が得られるはずです。それ以外の場合は、呼び出しているメソッドにputsステートメントを追加して、すすぎと繰り返しを行います。

于 2013-02-06T09:46:08.067 に答える