簡體   English   中英

rake任務是否限制了我類的功能以調用外部API?

[英]Does rake task limit functionality of my class to call external API?

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)返回的值是哈希,不是空的,不是nil,但是當我嘗試打印它時,它什么都沒有,是空的地方。

編輯:

一切工作正常,浪費了大約15個小時來調試不存在的問題。 我不確定為什么它不起作用,但在轉換為字符串后無法打印到控制台,因此我嘗試將其記錄下來以盲目歸檔。 我在文本文件中找到了什么? 數據。 我不知道為什么它不能在控制台中打印出所有內容。

在顯示的IRB腳本中,有一些puts語句不在rake任務中。 因此,為了進行調試,我會將puts ...添加到您的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語句來進行反復沖洗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM