Я использую скрепку для прикрепления файлов к моей модели. То, что я хотел бы сделать, это то, что после того, как модель была сохранена и файл записан на диск, мне нужно обновить другой атрибут в моей модели относительно файла (CRC). Поскольку paperclip не записывает файл на диск до тех пор, пока не будет вызван файл .save, моей первой мыслью было использование обратного вызова after_save. Когда я делаю это, я получаю ошибку «SystemStackError (слишком большой уровень стека):». Затем я попытался сделать обратный вызов after_commit, который, кажется, работает немного лучше. Например, если я просто назначу свой crc с помощью:
self.crc = "TEST"
self.save
Это работает. Однако, если я попытаюсь выполнить свое реальное задание, с этим:
self.crc = "0x" + IO.read(self.patchfile.path, 4, 0x20).unpack("H8").join
self.save
WEBrick прерывает работу с:
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(+0x180048) [0x290048]
/usr/local/rvm/rubies/ruby-1.9.2-p290/lib/libruby.so.1.9(rb_yield+0x56) [0x294c46]
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
Aborted
Так что я думаю, что я делаю это неправильно ...