2

Paperclipを使用して、画像のアップロードをサポートするモバイルアプリ用のAPIを構築しています。ペーパークリップはS3ストレージに設定されており、正常に機能します。

サーバーからS3へのアップロードをDelayedJobsを使用してバックグラウンドで実行したい(アプリはHerokuでホストされます)。

@ user.delay.photo = File.open(...)などを試してみると、遅延ジョブによるエラーが発生します

UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream

バックグラウンドアップロードを行うにはどうすればよいですか?

4

1 に答える 1

2

問題は、IOオブジェクトをマーシャリングして簡単に取得できないことです。

メソッドを使用し.delayて、オブジェクトをデータベースレコードにダンプし、ジョブの処理時にプルバックしようとします。このようにして、レコードを大きくてもろくします。

仕事でやることがたくさんある場合は、代わりにカスタムジョブを使用することをお勧めします。

class UploadJob < Struct.new(:user_id)
  def perform
    user = User.find(user_id)
    user.photo = File.open(.....)
  end
end

Delayed::Job.enqueue UploadJob.new(@user.id)

プロジェクトのtmpディレクトリにイメージを書き込み、ジョブから参照することで、自分で行うことができます。最後に、ジョブが終了したらクリーンアップを実行します。

または、この宝石を試すことができます:より便利なdelayed_pa​​perclip 。

于 2012-05-28T15:32:55.060 に答える