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に戻ってしまうのは私の目の前です。私はそれが環境問題かもしれないと思ったが、それはそうではないようだ。
問題についての洞察はありがたいです。
あなたは正しい結果を得るconsole'とレール 'から全体の方法を実行することができ、またはあなただけの問題のファイルで' File.size'をしようとしていますか? Rakeタスクの定義も役立つかもしれません。 –
返事をありがとう。 Railsコンソールのようにメソッドを実行すると、ファイルサイズは0になりますが、Railsコンソールで行ごとに(つまり各行をタイプして)メソッドを実行すると、正しい結果が返されます。 imgur.com/beK6g3K.jpg(そのSSの上半分は、メソッドを一度に実行する末尾です。下半分は、メソッドを1行ずつ実行するときのファイルサイズです)。 OPにレーキタスク定義を追加する。 – DnfD
私は迷っていますが、それはそのメソッドのコードパスにあるものでなければなりません。私はあなたのメソッドの最上部に '' File.size( "/ var/www/html/harmonize/public/close/CLOSED_123456_sum.txt")コールを置くでしょう。それが正しい値を出力するかどうかを確認してください。存在する場合は、問題の原因を特定するために、行を停止して停止するまで下に移動します。そうでない場合は、その行をRakeタスク定義の最初の行に移動し、それが動作するかどうかを確認してください。 –