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() とかにしてなければ、問題ないです。

symfonySQLに直接 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