はじめに
Railsアプリケーション開発時に、Whenever gemを使用してCronジョブをスケジューリングすることは非常に一般的です。しかし、サーバーのタイムゾーンとアプリケーションのタイムゾーン設定が異なる場合がよくあります。このような状況でWhenever gemを使用する際にタイムゾーンを適切に扱う方法について説明します。
基本設定の問題点
Railsアプリケーションでconfig.time_zone
を設定しても、Whenever gemを使用して設定したCronジョブはこのタイムゾーン設定を自動的に認識しません。例えば、アプリケーションがAsia/Tokyoに設定されている場合、毎日9時30分にジョブをスケジューリングするためには、サーバーのタイムゾーン設定に合わせて時間を調整する必要があります。
対策
Whenever gemを使用する際にRailsアプリケーションのタイムゾーン設定を明示的に適用したい場合は、以下のようにTime.zone.parseメソッドを使用してタイムゾーンを処理することができます。
require File.expand_path('../config/environment', __dir__)
every :day, :at => Time.zone.parse('09:30am').utc do
rake "leave_reminder:daily"
end
この方法は、Railsアプリケーションのタイムゾーン設定をCronジョブに適用したいときに役立ちます。このようにタイムゾーンを明示的に指定すると、Wheneverがスケジューリングする際にそのタイムゾーンを考慮してCronジョブを登録します。
参考