내 응용 프로그램은 일부 메타 데이터가 DB에 저장되고 파일 자체는 파일 시스템에 저장되는 파일 업로드를 허용합니다. 파일 업로드 및 사후 처리가 끝나기 전에 응용 프로그램에서 메타 데이터를 볼 수있게하려고합니다. 그러나 저장은 트랜잭션이기 때문에 성공하지 못했습니다. 콜백을 시도하고 save() 대신 create_or_update()를 호출하여 아무 소용이 없다. ActiveRecord :: Base의 용기를 다시 쓰지 않고도이 작업을 수행 할 수 있습니까? 나는 심지어 save() 대신에 make() 메서드의 이름을 지정하려고 시도했으나 아무런 효과가 없었습니다.비 트랜잭션 방식으로 ActiveRecord 저장
아래 코드는 "정상적으로 작동하지만"다른 모든 작업이 완료 될 때까지 데이터베이스가 수정되지 않습니다.
def save(upload)
uploadFile = upload['datafile']
originalName = uploadFile.original_filename
self.fileType = File.extname(originalName)
create_or_update()
# write the file
File.open(self.filePath, "wb") { |f| f.write(uploadFile.read) }
begin
musicFile = TagLib::File.new(self.filePath())
self.id3Title = musicFile.title
self.id3Artist = musicFile.artist
self.id3Length = musicFile.length
rescue TagLib::BadFile => exc
logger.error("Failed to id track: \n #{exc}")
end
if(self.fileType == '.mp3')
convertToOGG();
end
create_or_update()
end
모든 아이디어는 매우 환영받을 것입니다. 감사합니다.
수정 사항 : 업로드가 완료되었지만 변환이 완료되기 전에 DB가 수정됩니다. 이것은 순간적으로 낯선 사람이되고 있습니다. – theFunkyEngineer