Ruby on rails rake任务是否限制我的类调用外部API的功能?

Ruby on rails rake任务是否限制我的类调用外部API的功能?,ruby-on-rails,rake,Ruby On Rails,Rake,AllegroAPI是/models目录中调用外部API的类。当我在其他地方测试时,它可以按照我的意愿工作,而不是运行rake任务 示例工作代码: require "./AllegroAPI" allegro = AllegroAPI.new(login: 'LOGIN', password: File.read('XXXX.txt'), webapikey: File.read('XXX.txt')

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
快板:

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结果不是零,但它不包含任何内容

当我尝试调试它并从内部do_search函数调用API时,它调用的API不会引发错误,但响应为nothing。AllegroAPI工作正常。var“hash_to_ask”没有问题,它与工作示例中的hash完全相同

编辑:

我已经注释了check_for_new_拍卖并使用了“put”,当我通过执行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个小时来调试不存在的问题。我不知道为什么它不起作用,但在转换为字符串后它无法打印到控制台,所以我尝试盲目地将其写入文件。我在文本文件中找到了什么?数据。
我不知道为什么它不能在控制台中打印出所有内容。

在您显示的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
你应该得到一些输出。否则,通过在调用的方法中添加puts语句进行清洗和重复。

我已经调试了整个文件AllegroAPI,当我用rake运行它时,响应为空,而不是为零。当我用手而不是用rake运行它时,一切都正常。你能用“test value”替换check\u new\u拍卖块中的所有内容并查看rake任务中是否打印了“test value”吗?我自己做了一个小测试,任务。。。做end block应该可以读取模块中的值。。。我怀疑你的block def check\u new\u拍卖中有错误。。。我已经编辑了我的问题并解决了问题!谢谢你的帮助。
rake data:update_auctions