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
関連記事
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認証に必要な…