[Rails] Rails 5whenever에서 정기적으로 Rake 작업 수행
Rake 소개
이것은 Ruby를 설치할 때 함께 설치하는 라크 명령입니다. 루비 정의로 내용을 처리하는 구축 도구입니다.
Rake 명령과 Rake 미션은요.
rake 명령은 make 명령풍에서 작업을 수행하는 작업 프로그램으로, 실행하는 처리를 Rake 작업이라고 합니다. 정의된 위치를 'Rake file' 이라고 합니다.
간단히 말하면, Rails에서 정기적으로 수행하고자 하는 처리를 루비 코드로 정의하여 필요할 때 호출하고 실행할 수 있는 기능
터미널에서 프로그램을 시작하지 않고 실행할 수 있으며 서버를 시작하지 않은 상태에서 정의된 처리를 수행할 수 있는 것이 특징이다
다음 상황에 사용
Rake 작업 사용 방법
Rake 작업 파일 만들기
rails에서 라크 작업 파일을 만들려면 다음 명령을 실행하십시오
$ rails g task task_sample
실행 후 lib/tasks
다음 디렉터리는 task_sample.rake
라는 작업 파일을 생성하여 이 파일을 정의합니다※ 레이크 의뢰를 부적합한namespace에 추가하지 마십시오
이번에는 메일 관련 임무이기 때문에 디렉터리를 다시 나눈다
기존 작업에 관련 작업이 있는 경우 같은 작업
namespace
을 만듭니다.rails g taske namespace(ディレクトリ名):新たに作成するRakeタスクファイル名
작업 파일 설명
방금 명령에 따라 제작된 작업 파일은 다음과 같다
lib/tasks/task_sample.rake
namespece :task_sample do
end
이 블록에 다음과 같이 기술한다.namespace :タスクのファイル名 do
desc '実行する処理の説明'
task :タスクの名前 do
実行する内容
end
end
구체적인 예lib/tasks/task_sample.rake
namespace :task_sample do
desc 'Hello, Rake Task'
task :hello do
puts 'Hello, Rake!'
end
end
DB에 연결할 때
모델에 액세스할 때 추가
:environment
#モデルにアクセスする場合は :environment を指定します
namespace :task_sample do
desc 'Hello, Rake Task'
task hello: :environment do
puts 'Hello, Rake!'
end
end
작업 목록 만들기
다음 명령으로 작성된 Rake 파일 작업의 이름과 설명 목록을 가져올 수 있습니다.
$ bundle exec rake -T
rake hello # Hello, Rake Task
임무를 수행하다
임무의 집행은 다음과 같은 명령이다
$ bundle exec rake タスクのファイル名
$ rake hello
Hello, Rake!
whenever에서 정기적으로 처리
방금 처리를 정기적으로 실행하려면 whenever라는 gm를 사용하십시오
whenever는crontab 관리자 라이브러리입니다. whenever를 사용하여cron을 구동합니다.
또 위너버는 백그라운드에서 처리되기 때문에 레일스와 무관한 과정이다.
마이크로소프트가 밝혔다.Zsh와 rbenv 환경에서 움직이지 않으면!!
job_type으로 PATH를 통과해야 하기 때문에 주의하세요!
소위 크론
이것은 UNIX 시스템 OS의 프로그램입니다. 이것은 지정된 시간 안에 지정한 프로그램을 실행합니다. 또한, 이것은 정기적으로 명령을 실행하기 위해 메모리에서 명령을 수시로 기다리는 과정입니다.
소위 crontab (명령)
cron을 표시할 때 사용하는 명령
whenever 설치
gem 'whenever', require: false
bundle install
프로그램이 사용되지 않기 때문에'require:가짜'를 추가합니다. 이렇게 하면 예상치 못한 행동을 줄일 수 있습니다.구성 파일 schedulerb 만들기
이것은 config/schedule를 사용합니다.rb 파일을 만듭니다. (프로젝트에 config 폴더가 이미 존재하면 OK)
Whenever의 3가지 작업 유형
Whenever에서
command
, runner
, rake
세 가지 작업 유형을 미리 정의했다.job_type에서 자신의 작업 형식을 정의할 수 있습니다.이것들을 사용해서 실행하다
rake
라크 작업 수행
bundle exec wheneverize
command
bash 명령 실행
runner
Rails 내 접근 방식 실행
job_type에서 작업 형식 정의하기
예제)
rake 'タスクのファイル名:タスク名'
schedule.편집
마이크로소프트가 밝혔다.Zsh와 rbenv 환경에서 움직이지 않으면!!
job_type으로 PATH를 통과해야 하기 때문에 주의하세요!
예) config/schedulerb
# .zshrcとrbenvのパスを指定するrakeを定義
job_type :rake, "source /Users/docha/.zshrc; export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output"
# 毎日9:00に実行
every 1.day, at: '9:00 am' do
rake 'article_mailer:article_mailer'
end
Example schedule.rb file
GitHub - javan/whenever: Cron jobs in Ruby
# whenever 定期実行
# rake 'ファイル名':タスク名'
# Rails.root(Railsメソッド)を使用するために必要
require File.expand_path(File.dirname(__FILE__) + '/environment')
# .zshrcとrbenvのパスを指定するrakeを定義
job_type :rake, "source /Users/docha/.zshrc; export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output"
# cronを実行する環境変数(:development, :product, :test)
# 環境変数'RAILS_ENV'にセットされている変数またはdevelopmentを指定
# 自分の環境では'RAILS_ENV'はセットされていないのでnilです
rails_env = ENV['RAILS_ENV'] || :development
# cronを実行する環境変数をセット
# 今回はdevelopmentをセット
set :environment, rails_env
# cronのログの吐き出し場所
set :output, "#{Rails.root}/log/cron.log"
# 一時間毎に実行
every :hour do
rake 'article_state_check:article_state'
end
# 毎日9:00に実行
every 1.day, at: '9:00 am' do
rake 'article_mailer:article_mailer'
end
설정 내용에 오류가 있는지 확인
이것은 schedule의 내용을crontab로 번역하는 것에 불과하며 아직crontab에 로그인하지 않았습니다.
every 3.hours do # 1.minute 1.day 1.week 1.month 1.year もサポートしています。
# 以下のタスクは順番ではなく並行で実行されます
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
# 毎日 指定の時間
every 1.day, at: '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
# 毎日 指定の時間2回
every 1.day, at: ['4:30 am', '6:00 pm'] do
runner "Mymodel.task_to_run_in_two_times_every_day"
end
# 他にも次のショートカットがあります。 :hour, :day, :month, :year, :reboot
every :hour do
runner "SomeModel.ladeeda"
end
# 任意の曜日を選択または、 :weekend, :weekday
every :sunday, at: '12pm' do
runner "Task.do_something_great"
end
# 出力先logの指定
set :output, 'log/crontab.log'
# 実行環境の指定
set :environment, :development
cron에 데이터 반영하기
상기 설정 내용을cron에 반영
bundle exec whenever
이상 완료기타 명령
현황crontab의 기술 내용 확인
bundle exec whenever --update-crontab
현재crontab의 기술 내용 편집
crontab -l
cron에서 데이터 삭제
crontab -e
※ 크론에서 강제 삭제(주의 처리) 디렉터리 이름 변경 시 상기 삭제 불가 시 사용bundle exec whenever --clear-crontab
참고 자료
Rails에서 whenever를 사용하여 cron 설정
Rails에서 Rake 작업 만들기 - Qita
GitHub - javan/whenever: Cron jobs in Ruby
Whenever를 사용하여 Rails 작업을 정기적으로 수행 - 문서
오류 이외의 로그를 출력할 때
whenever를 사용하여crontab에서rake 작업을 설정할 때--silent 옵션을 삭제하는 방법-Qita
Reference
이 문제에 관하여([Rails] Rails 5whenever에서 정기적으로 Rake 작업 수행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yusuke_docha/articles/2d2cfd1030f6ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)