##環境
Ruby'2.6.3'
Rails '5.2.4'
wheneverのgemを入れます。
Gemfile
gem 'whenever', require: false
ターミナル
$ bundle install
$ bundle exec wheneverize
config/schedule.rbファイルが作られますので最後に記述します。
config/schedule.rb
every 1.minute do #every 2.hours, every 4.daysなど変更できます。
begin
runner "Batch::DataReset.data_reset"#cronで起動するファイルです。
rescue => e
Rails.logger.error("aborted rails runner")
raise e
end
end
config/schedule.rbに記述した内容がcrontabに反映されます。
次にlib/batch/data_reset.rbを作成します
lib/batch/data_reset.rb
class Batch::DataReset
def self.data_reset
Recommendation.destroy_all#Recommendationの中の空にします
Item.all.shuffle.take(3).each do |item|
Recommendation.create(recommendation_params(item))
end
#商品全て中から3つランダムに取得
#Recommendationの中に商品を追加させる
p "おすすめの商品"
end
#ストロングパラメータででgenre_id,item.user_id,item.idを判定する。
def self.recommendation_params(item)
{
genre_id: item.genre_id,
user_id: item.user_id,
item_id: item.id
}
end
end
ItemsController.er
@recommendations = Recommendation.all#表示させたいところに記述
items/view.erb
<p>おすすめのアイテム</p>
<% @recommendations.each do |recommendation| %>
<%= link_to item_path(recommendation.item) do %>
<%= recommendation.item.name %>
<% end %>
<% end %>
ターミナル
$ bundle exec whenever
$ bundle exec whenever --update-crontab
cronへ反映させます。
ファイルなど変更をした際は
$ bundle exec whenever --update-crontab
を入力し、反映させてください。
ターミナル
crontab -l
crontab -e
crontab -lは情報が確認できます。
crontab -eは直接cronの編集ができます。
ターミナル
sudo systemctl start crond
sudo systemctl stop crond
二つのコマンドは
cronの起動と停止ができます。