記事の対象者
バッチ処理で投稿のデータを管理したい人
前提条件
Ruby 2.6.3
Rails 6.1.5
実装の流れ
1、削除プログラムの作成
2、gem【whenever】の導入
削除プログラムの作成
app/libの配下にbatchフォルダを作成します。
次に作成したbatchフォルダの中でdata_reset.rbファイルを作成して以下を記述して保存します。
class Batch::DataReset
def self.data_reset
@activity_points = ActivityPoint.all.where("date <= ?", Date.yesterday)
@activity_points.delete_all
p "前日の活動拠点を全て削除しました"
end
end
コードの解説をします。
私は活動日が昨日になっているものを削除するプログラムを作成しました。
ActivityPointモデル内にあるdateカラムから日付が昨日のものを抽出します。
※データ抽出の参考記事
@activity_points = ActivityPoit.all.where("date <= ?", Date.yesterday)
gem【whenever】の導入
wheneverはcrontab管理を行なってくれるgemです。
crontabとは、cronという定期的に指定のプログラムを実行するスケジューラーの設定を編集するための管理コマンドです。viエディタで操作するのでviの操作に慣れておかなくてはなりません。
一方、wheneverはRailsでの記述をcrontabへ反映させてくれるので管理が便利になります。
wheneverの参考記事
# 1日1回前日までのデータを削除
require File.expand_path(File.dirname(__FILE__) + "/environment")
rails_env = Rails.env.to_sym
set :environment, rails_env
set :output, 'log/cron.log'
every 1.day, :at => '4:30 am' do
begin
runner "Batch::DataReset.data_reset"
rescue => e
Rails.logger.error("aborted rails runner")
raise e
end
end
まとめ
昨日のデータを取り出して削除という簡単なプログラムですが、データの抽出方法に意外と時間を取ってしまいました。データ操作を考えるの楽しいです。もっと扱えるようになりたいです。
少しでも参考になれば幸いです。
最後まで読んでいただきありがとうございました。