Ich habe eine Transaktion, die detaillierte Protokollierung benötigt, auch wenn es fehlschlägt. Wie kann ich das machen?Daten aufbewahren, wenn die Transaktion fehlschlägt?
Dies ist mein Code:
# csv gets loaded etc.
import = CsvImport.new
import.logger += 'Starting import'
ActiveRecord::Base.transaction do
import.logger += 'CSV loaded, starting import'
csv_array.each_with_index do |row, index|
begin
unless importer.has_key?(row[0])
import.logger += 'Key not found'
raise StandardError
end
result = CsvImporter.import_line(row[0])
import.logger += 'Imported line #{index} successfully' if result
rescue
import.logger += 'Transaction aborted!'
end
end
import.logger += 'Transaction successful!'
end
In einer fehlgeschlagenen Transaktion, der Logger nur hat „Import starten“ ohne der zusätzlichen Saiten im Inneren der Transaktion - offensichtlich. Wie kann ich diese Daten behalten?
' CsvImport.transaction' und 'import.transaction' funktionierte nicht oder lieber nicht die Daten im Attribut import.logger. Wie soll ich es benutzen? Die Ärzte haben mir nichts Neues erzählt, seit ich es so benutzt habe, wie es dokumentiert ist. – Cojones
Hat sonst jemand eine Idee, wie man die Protokollausgabe (oder irgendwelche Daten im Allgemeinen) einer Transaktion behält? – Cojones
@Cojones OK, jetzt verstehe ich. In Ihrem Code weisen Sie die Loggerausgabe einem Logger zu, der innerhalb der Transaktion definiert ist. Wenn dies fehlschlägt, wird alles rückgängig gemacht und es gibt nichts in der Ausgabe. Ich denke, Sie können versuchen: 1. Definieren Sie einen Logger außerhalb der Transaktion ODER 2. direkt die Ausgabe in Log-Dateien anstelle der Sammlung der Daten innerhalb einer Variablen und drucken Sie danach –