Help us understand the problem. What is going on with this article?

Rails の time_zone の設定は initializers/* には書かない

More than 3 years have passed since last update.

結論

config.time_zone の設定は config/initializers/* 下ではなく、config/application.rb に書く。

経緯

たぶん Rails 5 から、config/application.rb に下記のような記述があって、素直に config/initializers/*.rb 下に設定を書いていた。

# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.

デフォルトのタイムゾーンの設定も config/initializers/time_zone.rb というファイルを作って Rails.config.application.config.time_zone = "Tokyo" のように書いてたんだけど、どうも効いていない (Time.zone が UTC のまま)。

コードを追ってみると、activesupport/lib/active_suport/railtie.rbinitializer "active_support.initialize_time_zone"Time.zone_default を設定している。

このコードは config/initializers/* より早い段階で実行されるようなので、それより早い段階で time_zone を設定する必要がある。

結果 (Rails 4 までのコメント通り) config/application.rb で設定するのが正解ぽい。

環境

  • Rails 5.0.2
labocho
普通の Web プログラマ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away