symfony1.4を海外のサーバーで動かすときに注意すること
localで開発をしてAmazonEC2で運用しようとしたら、えらいハマった。
考えてみれば当たり前なんだけど、しばらく国内サーバーばかり使ってる温室育ちのボクはすっかり忘れてた。
タイムゾーンが違うのよね。。。
今回の場合は、ローカルで現在時間で公開時間を設定していたCMS用データをEC2に置いたサーバーでロードしたところ、全く使えなクなってしまった。
当たり前なんだけどUSWEST / USEASTどちらも、だいぶ日本より時間が遅い。
そもそも、CMSならまだしも、CGMだとユーザーの投稿時間がめちゃくちゃになってしまう。
超あぶねー。
という訳で、以下を必須で設定していおいた方が良さそう
project/configにsettings.yml
all: .settings: default_timezone: Asia/Tokyo default_culture: ja
projectにわざわざ作成した方が忘れちゃうのを防止する意味でもで良いと思います。
また、MYSQL心配!とか思ってても、直接クエリを NOW() とかにしてなければ、問題ないです。
symfonyはSQLに直接 NOW()ってやることはないです。
ちなみにsymfony本体のソース
sfApplicationConfiguration.class.php
<?php public function initConfiguration() { $configCache = $this->getConfigCache(); // 〜 略 〜 // // force setting default timezone if not set if ($default_timezone = sfConfig::get('sf_default_timezone')) { date_default_timezone_set($default_timezone); } else if (sfConfig::get('sf_force_default_timezone', true)) { date_default_timezone_set(@date_default_timezone_get()); } // 〜 略 〜 // self::$coreLoaded = true; }
date_default_timezone_setをせっていするとパフォーマンスもかなり上がるみたいだし、symfony結構やりよる。
参考:
http://d.hatena.ne.jp/sotarok/20080128/1201475353
http://d.hatena.ne.jp/shimooka/20090519/1242665027
http://www.symfony-project.org/reference/1_4/ja/04-Settings#chapter_04_sub_default_timezone