問題タブ [delayed-paperclip]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - S3 ダイレクト アップロードでの遅延ペーパークリップの使用
S3への直接アップロードと一緒にDelayed Paperclipを使用しています。私のモデルは と呼ばれPhoto
、その添付ファイルはimage
です。
画像は、Photo フォームから JavaScript を使用して S3 にアップロードされます。ファイルは、Paperclip が元の画像があると想定する場所に保存され、ファイルの詳細は隠しフィールドに保存されます。フォームが送信されると、これらの属性が Photo モデルに書き込まれます。
image_file_name
image_file_size
image_content_type
これらの属性を書き込むだけでは、Delayed Paperclip をトリガーして画像を処理するのに十分ではないように思われるため、これPhoto.save
を呼び出しPhoto.image.reprocess!
た後、DelayedPaperclip を取得して、画像を正常に処理する新しい Sidekiq ジョブを作成します。
問題は、 を呼び出すPhoto.save
とPhotosController
、ファイルがtemp
S3 からディレクトリにコピーされ、次に S3 に戻されることです。これはジョブの外で発生し、ブロックしています:
Paperclip がファイルをコピーしたり、元に戻したりするのはなぜですか?
heroku - Paperclip::Delayed Paperclip と Delayed Job を実行している Heroku での Tasks エラー
Heroku を起動すると、次のエラーが表示されます。
遅延ジョブで Paperclip とdelayed_paperclip を実行している場合。
ruby-on-rails-4 - delayed_paperclip は Resque の代わりに ActiveJob を使用します
バックグラウンドで Paperclip の添付ファイルを処理するようにDelayed::Paperclipを構成しました。Resque をインストールして構成しました。README によると、Resque はバックグラウンド タスクを処理するようになりました。
Resque が稼働中であることを確認してください。ジョブは :paperclip キューにディスパッチされるため、ワーカーを正しくディスパッチできます。resque とワーカーを他の場合とまったく同じように構成します。
ただし、バックグラウンド タスクを実行するための別のフレームワークである Active Job は、Rails 4.1/ActionMailer の依存関係としてインストールされ、Resque からタスクを「盗みます」。
問題は、Active Job が同じスレッドですぐに実行されているように見えることです。基本的に、バックグラウンドではまったく実行されません。
Delayed::Paperclip のコードを調べたところ、インストールされているバックエンドに優先順位があるようです:
それらを入れ替えてResqueを上に置くと、うまくいきます。優先度はハードコーディングされているようですが、そうであれば、この問題を抱えているのは私だけではないと思います。これはバグですか、それとも何か不足していますか?
ruby-on-rails - ActiveJob::SerializationError と ActiveUUID
次のエラーが表示されます。
これらの宝石を使用している間:
- アクティブUID
- ペーパークリップ
- 遅延ジョブ
- 遅れた_ペーパークリップ
これは私の実際のモデルコードです:
ActiveJobはオブジェクトを処理または認識できないため、エラーはactiveuuidまたはdelayed_paperclipから発生していると推測しています。
これを修正する方法を知っている人はいますか?
ruby-on-rails-4 - Delayed_Paperclip + Sidekiq + Mongoid-Paperclip
写真やビデオのユーザー アップロードを処理する Rails 4.1 エンジンに取り組んでいます。Mongoid-Paperclip を使用してアップロードを処理し、Paperclip-av-transcoder を使用してビデオをいくつかの形式にエンコードしています。すべてのファイルは S3 に保存されます。これらはすべて正常に機能しますが、予想どおり、ビデオのエンコードにはかなりの時間がかかる可能性があるため、次のステップはバックグラウンドでエンコードを行うことです。グーグルで調べたところ、 Delayed_Paperclipが必要な機能を果たしているように見えました。その後、Sidekiqがバックグラウンド処理を処理するための最良の選択肢であると思われました。
問題は、これらすべてを一緒に機能させることができないということです。単体テストを実行NoMethodError: undefined method 'process_in_background'
すると、特別な設定はありませんが、問題は Delayed_Paperclip にあるようです。
これは問題を発火するモデルです
ファイルに追加しようとしましrequire "delayed_paperclip"
たlib/myengine/myengine.rb
が、役に立ちませんでした。
Sidekiq に関してはtest_helper.rb
、次のように追加しました。
実行することを忘れていないことに注意してくださいbundle install
。Redis は稼働しています。アクティブなレコードではなく、Mongoid を使用しています。
私が間違っていることは何ですか?このセットアップをうまく使用した人はいますか? 試してみるべき宝石の別の組み合わせはありますか?
追加情報:
- Delayed_paperclip 2.9.1
- モンゴイド 4.0.2
- Mongoid-ペーパークリップ 0.0.9
- ペーパークリップ 4.2.1
- Paperclip-av-トランスコーダー 0.6.4
- レール 4.1.9
- サイドキク 3.5.0
ruby-on-rails-4 - Sidekiq - エンキューされたジョブがスタックしています
Rails 4アプリがあります。sidekiqでpaperclipとdelayed_paperclipを使用しています。バックグラウンド ジョブは sidekiq によって取得されていますが、エンキューされたキューで永久にハングします。
これは私がsidekiqで見たものです:
私の User モデルには次のものがあります。
procfile.yml
この質問に関連するすべての問題を読みましたが、まだ問題を理解できませんでした。誰か考えますか?
ありがとう。
ruby-on-rails - ペーパークリップ Nginx 504 ゲートウェイのタイムアウト
jQuery Dropzone プラグインと paperclip gem を使用してビデオをアップロードできる Rails 4 アプリケーションがあります。アップロードされた各動画は複数の形式にエンコードされ、delayed_paperclip、av-transcoder、sidekiq gem を使用してバックグラウンドで Amazon S3 にアップロードされます。
すべてがほとんどのビデオで正常に動作しますが、アップロードがドロップゾーン プラグインのプログレス バーの終わりのように見える値に達した後、1.1GB のようなより大きなサイズでは、Nginx 504 ゲートウェイ タイムアウトが返されます。
サーバーに関する限り、Rails アプリは、ロード バランサーの背後にある 2 台のサーバー上の Nginx + Passenger で実行されます (ここでも Nginx が使用されます)。ロード バランサーのアップストリーム セクションにタイムアウトを設定していません。client_max_body_size
(ロード バランサーとサーバーの両方で) 2000M に設定されていますpassenger_pool_idle_time
。大きな値 (600) に設定しようとしましたが、役に立ちませんでした。設定(600秒)も試しましたがsend_timeout
、何も違いはありませんでした。
注: これらの変更を行うときは、両方のサーバーとロード バランサーのホスト ファイルで変更を行い、その後常に nginx を再起動しました。
this oneとthis oneのような同様の問題に関するいくつかの回答も読みましたが、まだこれを理解できません。Googleもそれほど役に立ちませんでした。
paperclip/delayed_paperclip プロセス全体に不慣れな人向けの追加の注意事項。ファイルがサーバーにアップロードされ、ユーザーに関する限り、操作はバックグラウンドでビデオの後処理 (エンコード/S3 へのアップロード) で行われます。 ) はジョブとして Redis にプッシュされ、Sidekiq は時間/リソースがあるときはいつでもそれを処理します。
この問題の原因は何ですか? これをデバッグして解決するにはどうすればよいですか?
アップデート
Sergey's answer のおかげで、問題を解決できました。私は Paperclip の特定のバージョンに制限されていたため、修正された最新バージョンに更新できませんでした。
アップロードを処理するために使用するエンジンでは、engine_name.rb
ファイルに次のコードを追加して、修正が必要な Paperclip のメソッドをオーバーライドしました。