問題タブ [delayed-job]

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.

0 投票する
4 に答える
839 参照

delayed-job - バッジ付きのstackoverflowのようなサイトが、新しいバッジをいつ授与するかを決定するために、ある種の遅延ジョブを使用するのはなぜですか?

Stackoverflowには気の利いたバッジシステムがあります。私が気づいたことの1つは、バッジがすぐには授与されないことですが、基準を満たした後、ある種の遅延があるように見えることがあります。バッジを持っている他のいくつかのサイトでもこれに気づきました。

おそらくこれは、新しいバッジを授与する必要があるかどうかを確認するために定期的にスキャンする遅延ジョブを使用しているためです。このアプローチもここでアドバイスされていると思います:
バッジを実装する方法は?

ただし、なぜこれが必要なのかはよくわかりません。実装では、新しいコメントが投稿されるなど、関連するアクションが実行された後、checkAwardBadge関数が呼び出されてチェックするシステムを使用することをお勧めします。ユーザーは新しいコメントバッジの基準を満たしています。

スピード的には、関連するすべてのユーザー統計は、UserStatsのように、Userのサブモデルに単純に隠されているので、毎回コメントの数を数えるのではなく、単純なクエリになると思っていました。

私が好んでいるシステムは、高速で非常に理解しやすいものでなければならないことに気づきました。仕事の遅れで物事を複雑にする必要がある理由について、私がここで見逃している欠点はありますか?

明確にするために:私は抽象クラスAchievementsを持ち、実際のAchievementsごとにAchievementsを実装する予定です。各アチーブメントにはcheckAwardBadge関数があり、コントローラーから呼び出すことができます。また、そのルートを選択する必要がある場合は遅延ジョブ、またはユーザーが特定のバッジを獲得したかどうかを確認するためにいつでも呼び出すことができます。したがって、アチーブメントコードはすべて一元化されます。

0 投票する
2 に答える
1271 参照

ruby-on-rails - カピストラーノからのdelayed_job再起動

これが私のenvironment.rbにあるものです。「daemons」gem のバグが原因で再起動に問題があり、ghazel-daemons がそれを修正することを理解しています。しかし、私の場合はうまくいきません。私は Collectiveidea 2.1.0 を使用しています - DJ のプレバージョン、rails 2.3.5。

しかし、私はまだdelayed_jobをカピストラーノから再起動できません。

ありがとう

0 投票する
1 に答える
842 参照

ruby-on-rails - テストでdelayed_job出力を黙らせるにはどうすればよいですか?

システムの電子メールやさまざまな時間指定イベントなどのバックグラウンド タスクにdelayed_jobを使用しています。私は Delayed::Worker.new.work_off を使用して RSpec テストのイベントを処理していますが、テストの出力は次のように sh*t で散らばっています:

出力はデバッグに役立つと思いますが、それを黙らせる方法はありますか? テストがデバッグに失敗した場合は、常に有効にするのではなく、むしろ有効にしたいと思います。

ありがとう。

0 投票する
2 に答える
1398 参照

ruby-on-rails - 遅延ジョブ ワーカーの再試行に対するより高度な制御

そのため、ユーザーが特定のモデルを作成した後、(Heroku で) Delayed::Job ワーカーを after_create コールバックとして使用しています。

ただし、一般的な使用例は、ユーザーが何かを作成し、すぐに削除することです (おそらく、間違いや何かを犯したため)。

これが発生すると、ワーカーは起動しますが、手元のモデルをクエリするまでに、モデルは既に削除されていますが、自動再試行機能のために、この不運なジョブは 25 回再試行され、絶対に機能しません。

特定のエラーをキャッチし、それらが発生したときにその特定のジョブが再試行されないようにする方法はありますか?

0 投票する
2 に答える
292 参照

ruby-on-rails - Rails での Twitter OAuth Dance へのより高速でスケーラブルなアプローチ?

Heroku スタック (Memcached、DJ 非同期ワーカー、MongoDB 永続ストレージを完備) で Rails アプリを実行しています。

現在、当サイトでは Twitter Oauth を唯一の認証オプションとして使用しています。(最終的には、FB コネクト、OpenID、および/または電子メール/パスワードに拡張する予定です)。

おそらくご存じのとおり、Ruby/Rails アプリはそのままでは同時実行をサポートしていません。Heroku では、追加のアプリ インスタンス (dyno) をスピンアップして、同時実行数 (同時実行能力 = dyno の数) を増やすことができますが、それぞれ 36 ドル/月の費用がかかります。

サイトでの平均リクエストは 100 ミリ秒未満であるため、通常、これは問題ではありません。

Twitter OAuth を除く。Twitter への OAuth 関連のリクエストには、平均で約 3,500 ミリ秒かかります。

基本的に、誰かがログインすると、アプリ インスタンス全体が 3 ~ 4 秒間停止します。

これを軽減する適切な方法はありますか?これらのアクションを非同期 DJ ワーカーに入れるのは変ですか? ログインが少し遅くなる可能性がありますが、少なくとも多数の人が一度にログインしている場合や Twitter が非常に遅い場合、これらのプロセスはアプリの残りの部分や他の Web リクエストに影響しませんか?

他のアイデアはありますか?

0 投票する
2 に答える
1656 参照

ruby-on-rails - Rails Devise は遅延ジョブとしてパスワード リセット メールを送信します

Railsのプラグインdeviseのreset_password_instructionsをdelayed_jobに設定したいのですが、色々試して失敗しました。

関数 password_controller#creat を見つけました:

メールを送信してパスワードをリセットするために使用される文だと思います。

私はそれを次のように変更したい:

OK、構文エラーが返されます...

助けて..解決方法がわかりません..thx。

0 投票する
2 に答える
1748 参照

ruby-on-rails - ターミナルはdelayed_jobを開始すると言っていますが、何もしていません

ローカルマシンで完全に動作するアプリがあり、現在デプロイしています。私はVPSをすべてセットアップしましたが、それもほとんど機能します。私の問題はdelayed_jobを開始できないことに起因します。アプリにSSHで接続しているときに「rubyscript/delayd_job start RAILS_ENV = product」を実行すると、「delayed_job:process withpid11547started」が返されます。htopでプロセスを探すと、見つかりません。

だから私は掘り下げて、Monitがdelayed_jobを続けることができることを読みました。そのようにdelayed_jobを起動できることを期待して、それを設定しました。ただし、delayed_job.pidはないので、遠くまでは行きませんでした。しかし、最終的にnginxとmysqlを設定し、delayed_jobの設定を終了したいと思います。delayd_job.pidの欠如が邪魔になります。

アプリにSSHで接続し、「rake jobs:work RAILS_ENV = Production」を実行すると、すべてが正常に機能します。ですから、アプリ自体は問題ないと確信しています。

私はcollectiveideaのdelayed_jobを使用しています。助けてくれてありがとう。

0 投票する
1 に答える
139 参照

ruby-on-rails - /lib フォルダーのdelayed_job クラスで「requires」の使用を避ける

/lib フォルダにクラスがあり、delayed_job デーモンが Foo 型のオブジェクトを処理するために呼び出すクラスがあります。ワーカー クラスに「requires 'foo'」がない場合、DB から取得した YAML をどう処理するかがわからず、「undefined method」エラーが発生します。「requires 'foo'」を追加すると、明らかにこれが修正されます。これが通常の解決策です。

しかし..問題は、Foo クラスに counter_cache=>true があることです。DJ デーモンが Rails 環境をロードすると、Foo が自動ロードされ、counter_cache にコールバックが追加されます。次に、delayed_job デーモンが実行され、「requires 'foo'」が実行され、素直に Foo がリロードされ、counter_cache に別のコールバックが追加されます。その結果、counter_cache は行が追加または削除されるたびに 2 回更新されます。

:counter_cache=>true をラップして 1 回だけ実行する方法はありますか? 「requires」を明示的に使用せずに、DJ ワーカー クラスで「Foo」タイプのオブジェクトを使用する方法はありますか?

0 投票する
6 に答える
21317 参照

ruby-on-rails - ログに記録する遅延ジョブの取得

Railsログまたは遅延ジョブログファイルに遅延ジョブからのログメッセージが表示されません。表示されるメッセージは、delayed_jobs.logファイルのジョブ開始/成功/失敗のみです。

これは、ワーカーのバグやメモリリークの検出など、大きな問題を引き起こしています。助けてください!

0 投票する
1 に答える
1918 参照

ruby-on-rails - メモリ リーク Rails/遅延ジョブ

delayed_job から実行されているメソッドのメモリ使用量を監視するには、どのようなツールを使用できますか?

私はmemorylogic、oink、bleakhouseを見てきましたが、それらはすべてコントローラーで動作するように設計されているように見えるか、何かが欠けています。delayed_job メモリ リーク (gem 自体ではなく、それが実行されているコード) がどのように検出されるかの例は、非常に高く評価されます!