[Rails] Rails 5whenever에서 정기적으로 Rake 작업 수행

13788 단어 Railsgemtech

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

    좋은 웹페이지 즐겨찾기