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

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

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

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1640閲覧

【Rails】cron(whenever)を用いてあるアクションが起きた際にレコードの削除を行いたい

yastinbieber

総合スコア49

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

1クリップ

投稿2020/08/19 01:47

編集2020/08/23 10:03

前提・実現したいこと

あるアクションが起きた際にそのユーザーのあるレコードを自動で削除したいと考えております。

具体的には、
本日の日付(today_date)がサービス終了日(last_day_date)を超えた段階でidealweightテーブルの該当するユーザーのレコードを自動的に削除したいです。

ちなみにidealweightモデルは、
userモデルと1:1の関係性を持っています。

前回の質問でcronを用いるとお教えいただいたので実装を試みたのですが実行された様子がなく困っております。

該当コードを下記にはらせていただきますのでご教授いただけますと幸いです。
よろしくお願い致します。

該当のソースコード

##user.rb class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one :idealweight, dependent: :destroy  #今日の日付  def today_date @today = Date.today @today.strftime("%Y%m%d").to_i end  #サービス最終日  def last_day_date idealweight.last_day.strftime("%Y%m%d").to_i end end
##idealweight.rb class Idealweight < ApplicationRecord  belongs_to :user  #狙いは『今日の日付』が『サービス最終日』を超えた場合該当するレコードを削除します  def self.bye_idealweight Idealweight.where("current_user.start_day_date<?", current_user.today_date).destroy_all end end
##config/schedule.rb require File.expand_path(File.dirname(__FILE__) + "/environment") rails_env = ENV['RAILS_ENV'] || :development set :environment, rails_env set :output, "#{Rails.root}/log/cron.log" #10分単位で監視をし、先程指定したケースで該当するレコードを削除します(idealweight.rbで指定しています) every 10.minutes do runner "Idealweight.bye_idealweight" end

試したこと

ec2-user:~/environment/toreka (master) $ bundle exec whenever 0,10,20,30,40,50 * * * * /bin/bash -l -c 'cd /home/ec2-user/environment/toreka && bundle exec bin/rails runner -e development '\''Idealweight.bye_idealweight'\'' >> /home/ec2-user/environment/toreka/log/cron.log 2>&1' ## [message] Above is your schedule file converted to cron syntax; your crontab file was not updated. ## [message] Run `whenever --help' for more options. ec2-user:~/environment/toreka (master) $ crontab -l # Begin Whenever generated tasks for: /home/ec2-user/environment/toreka/config/schedule.rb at: 2020-08-18 12:18:56 +0000 0 0 * * * /bin/bash -l -c 'cd /home/ec2-user/environment/toreka && bundle exec bin/rails runner -e development '\''Idealweight.delete_idealweight'\'' >> /home/ec2-user/environment/toreka/log/cron.log 2>&1' # End Whenever generated tasks for: /home/ec2-user/environment/toreka/config/schedule.rb at: 2020-08-18 12:18:56 +0000 ec2-user:~/environment/toreka (master) $

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

Rails 5.2.4.3
ruby 2.5.1

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

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

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

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

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

guest

回答1

0

自己解決

##idealweight.rb class Idealweight < ApplicationRecord #一部省略 def self.bye_idealweight Idealweight.where("last_day<?", Date.today).destroy_all end  #終了日よりも本日の日付が大きくなった段階で該当するレコードを削除する end
##schedule.rb require File.expand_path(File.dirname(__FILE__) + "/environment") rails_env = ENV['RAILS_ENV'] || :development set :environment, rails_env set :output, "#{Rails.root}/log/cron.log" #10分毎に監視する every 10.minutes do runner "Idealweight.bye_idealweight" end

これで無事実装することができました。

投稿2020/08/23 10:03

yastinbieber

総合スコア49

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問