У меня есть транзакция, требующая подробного ведения журнала, даже если она терпит неудачу. Как я могу это сделать?Сохранять данные, если транзакция не удалась?
Это мой код:
# 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
В неудачной операции, регистратор только имеет «Запуск импорта» без какого-либо добавленных строк внутри транзакции - очевидно. Как я могу хранить эти данные?
' CsvImport.transaction' и 'import.transaction' не работали или, скорее, не сохраняли данные в атрибуте import.logger. Как я должен его использовать? Документы не сказали мне ничего нового, так как я использовал его так, как он документирован. – Cojones
Кто-нибудь еще получил представление о том, как сохранить вывод журнала (или любые данные в целом) транзакции? – Cojones
@ Коджоуз ОК, теперь я понимаю. В коде вы назначаете вывод журнала на регистратор, который определен внутри транзакции. Когда это не удается, все возвращается и ничего не выводится. Я думаю, вы можете попробовать: 1. определить логгер вне транзакции ИЛИ 2. непосредственно сделать вывод в лог-файлы вместо сбора данных внутри переменной и напечатать их потом –