Rails 6 に whenever をインストールする
はじめに
Rails 6 に whenever をインストールするためのメモ。
whenever
は、Rails でタスクを定期実行するためのRuby gemです。
環境
$ hostnamectl status
Static hostname: ---
Icon name: computer-container
Chassis: container
Machine ID: ---
Boot ID: ---
Virtualization: lxc
Operating System: Ubuntu 20.04.2 LTS
Kernel: Linux 5.4.0-67-generic
Architecture: x86-64
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
$ bundle exec rails version
Rails 6.1.4
インストール
Gemfile に追加。
$ vim Gemfile
追記内容は以下。
gem 'whenever', require: false
Bundle を利用して、 whenever をインストール。
$ bundle install
スケジュール登録
schedule.rb
を生成。
$ bundle exec wheneverize .
[add] writing `./config/schedule.rb'
[done] wheneverized!
schedule.rb
を下記内容に編集。
set :output, File.join(Whenever.path, "log", "cron.log")
rails_env = ENV['RAILS_ENV'] || :development
env :PATH, ENV['PATH']
env :GEM_PATH, ENV['GEM_PATH']
every 1.minute do
rake 'example_task:run'
end
タスク作成
rakeタスクを作成。
$ bundle exec rails generate task example_task
Running via Spring preloader in process 3029495
create lib/tasks/example_task.rake
生成したexample_task.rake
を編集。
$ vim lib/tasks/example_task.rake
生成したマイグレーションファイルを編集。
namespace :example_task do
desc 'タスクを実行する'
task run: :environment do
puts "Run task"
end
end
タスク実行
タスクを実行。
$ bundle exec rake example_task:run
正常に完了すると下記実行結果を表示。
Run task
Cronに反映
構文チェックを実施。
$ bundle exec whenever
構文に問題がなければ下記実行結果を表示。
* * * * * /bin/bash -l -c 'cd /home/ubuntu/projects/api && RAILS_ENV=development bundle exec rake example_task:run --silent >> /home/ubuntu/projects/api/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.
CRONに設定を反映。
$ bundle exec whenever --update-crontab
設定内容を確認。
$ crontab -l
# Begin Whenever generated tasks for: /home/ubuntu/projects/api/config/schedule.rb at: 2021-10-11 15:08:38 +0900
* * * * * /bin/bash -l -c 'cd /home/ubuntu/projects/api && RAILS_ENV=development bundle exec rake example_task:run --silent >> /home/ubuntu/projects/api/log/cron.log 2>&1'
# End Whenever generated tasks for: /home/ubuntu/projects/api/config/schedule.rb at: 2021-10-11 15:08:38 +0900
CRONの設定を削除。
$ bundle exec whenever --clear-crontab
参考サイト
About
関西在住のエンジニア
言語: Ruby・Go・PHP
フレームワーク: RoR・Gin
趣味: 自作PC