[Heroku]タイムゾーンを設定する

Rails使いの味方Herokuネタです。

HerokuでRailsアプリをデプロイする場合、タイムゾーン設定にちょっと癖があります。

タイムゾーンを設定しても有効にならない

例えばページにアクセスすると「2010-07-28 13:28」と現在時刻を表示したいとしましょう。 時間によってメッセージを変えたりしたらとってもフレンドリーですよね。

そこで普段からenvironment.rbの編集はお手の物のRails紳士はこうするよね?

# config/environment.rb
config.time_zone = 'Tokyo'

さて、そろそろお昼だ。Heroku上で現在時刻のテストでもしてみよう。

# % heroku console
>> Time.now.strftime("%Y-%m-%d %H:%M")
=> "2010-07-27 20:28"

なん・・だと・・?

そうです、Herokuではconfig/environment.rbのデフォルトタイムゾーンを無視しているようです。ちゃんとした理由はしりませんので、誰か教えてください。

解決策

解決策はこうです。

herokuコマンドのconfig:addを使って環境変数TZを東京(+09:00)に変更してやります。

% heroku config:add TZ=Asia/Tokyo
Adding config vars:
TZ => Asia/Tokyo
Restarting app...done.
さて、気を取り直してもう一度。。
早くしないと休み時間おわっちゃうー
>> Time.now.strftime("%Y-%m-%d %H:%M")
=> "2010-07-28 12:36"

ちゃんと、日本時間で出力されました。良かったですね。

追記

@milk1000cc さんに教えていただきました。

Rails2.1から使えるTime.zone.now、Time.zone.atを使えば、環境変数を設定しなくともタイムゾーンを考慮した時刻が取れるそうです。

@func09 Time.zone.now, Time.zone.at みたいに Time.zone.(メソッド) って書けば time_zone 考慮してくれますよ。僕も前悩みました。

http://twitter.com/milk1000cc/status/19715676833 http://twitter.com/milk1000cc/status/19715779235

@milk1000cc++

関連記事

  1. [ruby]Vpimパッケージを使ってicalendar形式のRRULEを展開してみる
  2. 毎日読むRails environment.rb その2
  3. 毎日読む Rails environment.rb その3
  4. [rails] restful-authenticationの使い方 基本編
  5. Rails::Initializer.runは2回(以上)実行されている?
Posted in ruby, ruby on rails at 7月 28th, 2010. Trackback URI: trackback

One Response to “[Heroku]タイムゾーンを設定する”

  1. 2月 9th, 2011 at 9:15 AM #アインシュタインの電話番号☎

    [ruby]Herokuを使って1日1回名言をツイートするTwitter Botの作り方

    ここ最近、Google App EngineやHerokuを使ってTwitter Botを作ろうと、いろいろ実験していた。以下はその関連記事。 Google App EngineのJRubyでSinatraを使ってHello worldする RubyでTwitterのOAuth認証に必要な…

Leave a Reply