ざっくりん雑記

プログラミングで忘れそうなことをひたすらメモる

Heroku - タイムゾーンを日本に設定する

Herokuのタイムゾーン設定方法

一言でいうと

$ heroku config:add TZ=Asia/Tokyo --app [app-name]で設定可能。

サーバの現在時刻を調べる

HerokuはデフォルトでタイムゾーンAsia/Tokyoではない(リージョンはUnited Statesの場合)

コンソールを立ち上げて確認してみる(heroku run console)。

$ heroku run console --app hoge-app
Running console on ⬢ hoge-app... up, run.1087 (Free)
Loading production environment (Rails 4.2.7)
irb(main):001:0> Time.now
=> 2017-03-25 04:13:28 +0000
irb(main):002:0> exit

なお、Herokuで作成しているアプリが一つしかない場合は--appオプションは必要ないが、複数ある場合は一意に特定して実行するために--app [app-name]という感じで指定してあげている。

日本時間は現在13時頃だが、2017-03-25 04:13:28 +0000となっている。

サーバのタイムゾーンを設定する

$ heroku config:add TZ=Asia/Tokyo --app hoge-app
Setting TZ and restarting ⬢ hoge-app... done, v35
TZ: Asia/Tokyo

TZという環境変数Asia:Tokyoを設定することで、タイムゾーンが日本になる。

設定が反映されているか確認してみる。

$ heroku run console --app hoge-app
Running console on ⬢ hoge-app... up, run.2172 (Free)
Loading production environment (Rails 4.2.7)
irb(main):001:0> Time.now
=> 2017-03-25 13:14:20 +0900
irb(main):002:0> exit

日本での現在時刻と一致していることが分かる。

以上です。

追記: ブラウザで設定する

下記リンクのアプリ設定画面にてConfig VariablesからReveal Config Varsをクリックすることで、環境変数を管理できます。

https://dashboard.heroku.com/apps/[app name]/settings

ターミナルと同様に、TZという環境変数Asia:Tokyoを設定すれば良いです。

https://gyazo.com/885f68d443cd9dd1c671c4f82d6a8759

あれですね、$ heroku config:add TZ=Asia/Tokyoとこのブラウザで設定するのは同じ動作ということです。ブラウザ上で設定しても、heroku run consoleで設定がうまくいっているか確認すると思うので、ターミナルで設定するのがよさそう。

参考

qiita.com