0

次のエラーが表示されます。

    [ActiveJob] Enqueued DelayedPaperclip::Jobs::ActiveJob (Job ID: 78975c5c-7da2-4a70-a156-91cda1c53013) to DelayedJob(paperclip) with arguments: "Video", #<UUID:0x3fc83523c368 UUID:b543e798-ad01-4416-b8fb-9ddb0d31a6ce>, "video"
Completed 500 Internal Server Error in 96195ms (ActiveRecord: 1.5ms)

ActiveJob::SerializationError (Unsupported argument type: UUIDTools::UUID):
  app/controllers/video_controller.rb:11:in `create'

これらの宝石を使用している間:

  • アクティブUID
  • ペーパークリップ
  • 遅延ジョブ
  • 遅れた_ペーパークリップ

これは私の実際のモデルコードです:

class Video < ActiveRecord::Base
  include ActiveUUID::UUID

  belongs_to :timeline
  has_attached_file :video,
                    :styles => {
                        :thumb => { :geometry => "360x360#", :format => 'jpg', :time => 1 },
                        :lowres => { :geometry => "360x360#", :format => 'mp4' }
                    }, only_process: [:thumb], :processors => [:transcoder],
                    :path => ":class/:id/:style/:basename.:extension"

  validates_attachment_content_type :video, :content_type => ["video/mp4", "video/mov", "video/mpeg","video/mpeg4", "video/quicktime", "image/jpg", "image/jpeg"]

  process_in_background :video, only_process: [:lowres]

ActiveJobはオブジェクトを処理または認識できないため、エラーはactiveuuidまたはdelayed_pa​​perclipから発生していると推測しています。

これを修正する方法を知っている人はいますか?

4

1 に答える 1

0

ActiveJob は、バックエンド (sidekiq、dj など) に送信される引数をシリアル化しようとします。JSON シリアライズ可能オブジェクトと GlobalID のみが受け入れられます。最も簡単な解決策は、uuid を文字列として渡し、ジョブで uuid を再構築することです。

# enqueue
VideoJob.perform_later uuid.to_s
# job class
class VideoJob
  def perform(uuid_string)
    uuid = UUIDTools::UUID.parse(uuid_string)
    # do whatever you need to do
  end
end
于 2015-08-20T20:41:10.937 に答える