Скрепка процессор работает на S3 - PullRequest
3 голосов
/ 16 ноября 2010

Я пытаюсь создать пользовательский Paperclip::Processor, который интегрируется с внешним веб-сервисом (процессор будет вызывать веб-сервис при загрузке нового файла).Внешнему сервису необходим файл, присутствующий на S3, и он будет автоматически загружать обработанные версии на S3.

Может ли это быть сделано с помощью пользовательского Paperclip::Processor или это должно быть сделано с помощью обратного вызова ActiveRecord?Если Paperclip::Processor будет работать, каков наилучший способ инициировать загрузку?В идеале я хотел бы сделать процессор, но требование состоит в том, чтобы исходный файл ДОЛЖЕН быть загружен в S3 в первую очередь.Я рассмотрел использование вызовов after_create, но иногда кажется, что он конфликтует с after_create, используемым в скрепке.Благодаря.

Ответы [ 2 ]

3 голосов
/ 16 ноября 2010

Вы можете сделать это, чтобы создать локальную копию файла.Если он находится на S3, он будет загружен.

tmp_file = @model.attached_file.to_file => TempFile<...>

Затем вы можете выполнять свои операции с этим TempFile.Когда вы не в курсе:

@model.attached_file = tmp_file
@model.save

Редактировать: неверно истолковать ваш вопрос.Вы можете использовать хуки before_post_process и after_post_process для выполнения задач до или после обработки файла.

class Model < AR::Base
  has_attached_file :avatar

  after_post_process :ping_webservice

  private

  def ping_webservice
    # Do your magic here.
  end
end
2 голосов
/ 09 декабря 2010

Я недавно имел дело с подобной проблемой, и это было с обратным вызовом after_save. Мне удалось решить мою проблему путем определения скрепки (has_attached_file ...) после того, как я определил свое after_save. Таким образом, обратный вызов скрепки сработает после моего.

...