質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

1522閲覧

Ruby On Rails Side Kiq(非同期処理)とActiveJobを使って自動更新機能を実装しているのですが上手くいきません。

fkryu

総合スコア31

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2018/07/06 08:22

前提・実現したいこと

Ruby On RailsでSide Kiq(非同期処理)とActiveJobを使って自動更新機能を実装しているのですがなかなか上手く行かずに困っています。
コードを見る限り問題点がわからないのですが他に何か原因があれば教えていただけると助かります。。

発生している問題

例えば毎月1日の0時を超えるとステータスが変更されるという機能を実装しているところなのですが、0時を過ぎても自動処理が行われません。。

ActiveJobのソースコード

update_order_request_plans_job.rb class UpdateOrderRequestPlansJob < ActiveJob::Base queue_as :default def perform OrderRequestPlan.skip_callback(:save, :before, :set_status_id) OrderRequestPlan.skip_callback(:save, :before, :set_expire_at) expired_orps = OrderRequestPlan.where(status_id: OrderRequestPlan::ENABLE).where('expire_at < ?', Time.current) takeover_plan(expired_orps) prepare_orps = OrderRequestPlan.where(status_id: OrderRequestPlan::PREPARE).where('started_at < ?', Time.current) prepare_orps.each do |prepare_orp| next if OrderRequestPlan.where(user_id: prepare_orp.user_id, status_id: OrderRequestPlan::ENABLE).present? prepare_orp.update(status_id: OrderRequestPlan::ENABLE) end end def takeover_plan(expired_orps) expired_orps.each do |expired_orp| prepare_orp = OrderRequestPlan.find_by(user_id: expired_orp.user_id, status_id: OrderRequestPlan::PREPARE) update_params = { status_id: OrderRequestPlan::EXPIRE } update_params[:cancel_flg] = true if prepare_orp.present? expired_orp.update(update_params) next if expired_orp.cancel_flg == true new_orp = OrderRequestPlan.new(expired_orp.takeover_params) new_orp.started_at = Time.current.beginning_of_month new_orp.set_expire_at new_orp.save end end end

Side Kiqのソースコード

sidekiq_scheduler.yml update_order_request_plans: cron: "0 0 1 * * Asia/Tokyo" class: "UpdateOrderRequestPlansJob" args: description: "更新"

補足情報(FW/ツールのバージョンなど)

一度は自動更新の処理ができていたのですが、なぜか処理されなくなりました。。
コード自体は変えていないので何か原因があるのであれば教えていただきたいです。。
どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

sidekiq_scheduler.yml っていうのはこの gem を使っているんでしょうか?
https://github.com/moove-it/sidekiq-scheduler

一度は自動更新の処理ができていたのですが、なぜか処理されなくなりました。。

僕はこのgemを使ったことがないんですが、 sidekiq が止まってたりしませんかね?

あとは gem の README を見るとこの辺↓↓の設定してると思うんですが、もう一度見直ししてみてはいかがでしょうか?
https://github.com/moove-it/sidekiq-scheduler#load-the-schedule-from-a-different-file

投稿2018/07/19 14:56

ikepon

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問