【Rails】Active JobとWheneverでスクレイピングを自動化(#4 本番環境の設定)

投稿日:

プログラミング初心者の勉強ブログ #75

RailsのActive Jobとwheneverによるスクレイピング自動化の最終章です。本番環境のcrontabと、Active Jobのworkerを設定していきます。指定した時間にバックグラウンドで、cronとworkerが設定したJobを動かします。

 

目次

 

前回までの内容

前回までで、Delayed Jobを使ったActive Jobの設定を行い、Jobのコーディングまで行いました。

 

【#1 Active Jobの仕組みと処理の流れについて】

【#2 Active Jobの設定手順について】

【#3 Wheneverの使い方について】

 

#4である今回は、本番環境で設定したJobを動かすための、設定方法をまとめていきます。

 

本番環境で実行するためにやらなければならないこと

本番環境で実行するためにやらなければならないことは2つあります。

  1. 本番環境のOSに潜むcronの設定
  2. Active Job(delayed_job)を巡回するworkerの設定

まずはcronの設定です。crontabと呼ばれるファイルに、実行してほしい内容と時間をメモしておくと、指定した時間に処理実行のスイッチを押してくれます。

「http://example.com」のリクエストがスイッチとなって、controllerのindexアクションが起動するのと同様に、このcronの「スイッチ」を使って、指定した時間に「Job管理テーブル」にJobを登録(エンキュー)します。

cron図解

Job管理テーブルに登録されたJobは、ただのDBにあるテーブルなので、そのままでは何もしません。ここでworkerの出番になります。

workerはJob管理テーブルを数秒ごとに巡回し、Jobがないかチェックします。workerがJobを発見した段階で、ようやく処理が実行されます。

 

そのため、「worker」の設定が必要になってきます。開発環境では

を入力することでworkerが働き始めるのですが、本番環境ではコマンドを打たず、いつでも定期的に巡回してくれるようにworkerを設定していく必要があります。

 

※cronやActive Jobの仕組みについては、前回までのブログに書いております。

 

実際のコーディング

「CentOS7+Nginx+Unicorn+Capistrano」にて、「Delayed_job+Whenever」で設定した、バックグラウンドでのJob自動化機能を持ったRailsアプリをデプロイしております。WheneverとCapistrano設定について、既に完了している状態から進んでおります。

 

本番環境OSのcron設定

Wheneverを使ったcron設定は、Capistranoでのデプロイ時に一緒に行われます。少しだけコードを追加するだけなので便利とのことです。

参考:

Wheneverは導入が超簡単なcrontab管理ライブラリGemです![Rails 4.2 x Ruby 2.3] | 酒と涙とRubyとRailsと

Capfileとdeploy.rbに追加記入

Capfile

config/deploy.rb

 

Active Job(delayed_job)を巡回するworkerの設定

workerの設定は、「daemons」と「capistrano3-delayed-job」という専用のgemを使用します。こちらの設定もデプロイ時に完了します。

参考:

GitHub capistrano3-delayed-job

GitHub daemons

Delayed Job の導入とMackerelによる監視 - Qiita

必要なgemを追加インストール

Gemfile

 

各ファイルに追加記入

Capfile

config/deploy.rb

 

どちらも設定が終わった状態でデプロイすると、crontabが更新されます。指定した時間になるとworkerが上手く起動し、Jobを実行してくれました。

 

まとめ

僕が書いたものよりも、「参考」として載せたリンクを見ていただいた方が詳細が載っているのでわかりやすいかもしれません。Wheneverでcrontab設定する系の記事は色々とありましたが、特に参考になったものを載せております。

以上ありがとうございました。

-プログラミング学習
-, ,

Copyright© s u p ? , 2019 All Rights Reserved.