Rails控制台与rake任务:返回File.size不一致

时间:2017-08-31 16:59:40

标签: ruby-on-rails csv rake-task rails-console

我遇到一个奇怪的问题,当我在Rails控制台中检查特定文件的File.size时,它会返回正确的大小。但是,当我在rake任务中运行相同的代码时,它返回0.这是有问题的代码(我已经整理了一些以帮助提高可读性):

def sum_close
  daily_closed_tickets = Fst.sum_retrieve_closed_tickets
  daily_closed_tickets.each do |ticket|
      CSV.open("FILE_NAME_HERE", "w+", {force_quotes: false}) do |csv|
          if (FileCopyReceipt.exists?(path: "#{ticket.attributes['TroubleTicketNumber']}_sum.txt")) 
              csv << ["GENERATE CSV WITH ATTRIBUTES HERE"]
              files = Dir.glob("/var/www/html/harmonize/public/close/CLOSED_#{ticket.attributes['TroubleTicketNumber']}_sum.txt")
              files.each do |f|
                  Rails.logger.info "File size (should return non-0): #{File.size(f)}" #returns 0, but not in Rails Console
                  Rails.logger.info "File size true or false, should be true: #{File.size(f) != 0}" #returns false, should return true
                  Rails.logger.info "Rails Environment: #{Rails.env}" #returns production
                  if(!FileCopyReceipt.exists?(path: f) && (File.size(f) != 0))
                      Rails.logger.info("SUM CLOSE, GOOD => FileUtils.cp_r occurred and FileCopyReceipt object created")            
                  else
                      Rails.logger.info("SUM CLOSE, WARNING: => no data transfer occurred")
                  end
              end
          else
              Rails.logger.info("SUM CLOSE => DID NOT make it into initial if ClosedDate.present? if block")
          end
      end
  end

close_tickets.rake

task :close_tickets => :environment do
    tickets = FstController.new
    tickets.sum_close
    tickets.dais_close
end

当这个作为rake任务运行时,为什么这个File.size返回为0,这超出了我的意思。我认为这可能是一个环境问题,但似乎并非如此。

对此事的任何见解表示赞赏。

1 个答案:

答案 0 :(得分:1)

CSV.open块以及其中包含的所有内容都会导致问题。所以我只是将CSV生成为自己的代码片段而不是将所有内容包装在那里。

daily_closed_tickets.each do |ticket|
    CSV.open("generate csv here.txt") do |csv|
        #enter ticket.attributes here for the csv
    end
    #continue on with the rest of the code and File.size() works properly
end