2017-08-31 15 views
0

Railsコンソールの特定のファイルのFile.sizeをチェックすると、正しいサイズが返されるという奇妙な問題が発生します。私はrakeタスクで同じコードを実行するときしかし、それはここでは0を返します。問題のコードです(私は読みやすさを助けるために少しそれを片付けました):Railsコンソール対rakeタスク:File.sizeが一貫していない

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に戻ってしまうのは私の目の前です。私はそれが環境問題かもしれないと思ったが、それはそうではないようだ。

問題についての洞察はありがたいです。

+0

あなたは正しい結果を得るconsole'とレール 'から全体の方法を実行することができ、またはあなただけの問題のファイルで' File.size'をしようとしていますか? Rakeタスクの定義も役立つかもしれません。 –

+0

返事をありがとう。 Railsコンソールのようにメソッドを実行すると、ファイルサイズは0になりますが、Railsコンソールで行ごとに(つまり各行をタイプして)メソッドを実行すると、正しい結果が返されます。 imgur.com/beK6g3K.jpg(そのSSの上半分は、メソッドを一度に実行する末尾です。下半分は、メソッドを1行ずつ実行するときのファイルサイズです)。 OPにレーキタスク定義を追加する。 – DnfD

+0

私は迷っていますが、それはそのメソッドのコードパスにあるものでなければなりません。私はあなたのメソッドの最上部に '' File.size( "/ var/www/html/harmonize/public/close/CLOSED_123456_sum.txt")コールを置くでしょう。それが正しい値を出力するかどうかを確認してください。存在する場合は、問題の原因を特定するために、行を停止して停止するまで下に移動します。そうでない場合は、その行をRakeタスク定義の最初の行に移動し、それが動作するかどうかを確認してください。 –

答えて

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 
関連する問題