FuelPHPのoil createでエラーが出る件
さくらのVPSでFuelPHPを動かそうと思って
oil create PROJECT_NAME
とコマンドを打つと
Submodule path 'fuel/packages/parser': checked out '634204f87047fdb2d5957b74a7c24a4faea33cc2' PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0 Fatal error: Exception thrown without a stack frame in Unknown on line 0
とエラーが出てしまう。
同じ事をAmazonのEC2でやると
Submodule path 'fuel/packages/parser': checked out '634204f87047fdb2d5957b74a7c24a4faea33cc2' Made writable: /APP_PATH/fuel/app/cache Made writable: /APP_PATH/fuel/app/logs Made writable: /APP_PATH/fuel/app/tmp Made writable: /APP_PATH/fuel/app/config
こんな感じで成功する。どうも最後の権限変更で落ちてるっぽい。
/usr/bin/oil
の中身を見てどんな処理が行われていて、どこで落ちているかを追いかけて行くと
fuel/core/classes/fuel.php の
static::$timezone = \Config::get('default_timezone') ?: date_default_timezone_get();
で落ちているみたい。
Config::get('default_timezone') は fuel/app/config/config.php の
default_timezone の値を見るのだけど、確認してみたら空だった。
なのでphpのdate_default_timezone_get()を実行するのだけれど、ここで落ちている。
date_default_timezone_get() は php.ini の date.timezone を見るので
/etc/php.ini を見てみたら、見事に空だった。そこで /etc/php.ini に
date.timezone = "Asia/Tokyo"
を追加してあげるとエラーが起きずに oil create が完了した。
EC2はパッケージのインストール時に気を利かせて色々設定してくれるので、
php.iniのtimezoneも設定してくれててエラーが起きなかったみたい。
最初に config.php を見てるので fuel/app/config/config.php に
'default_timezone' => 'Asia/Tokyo'
を記述してもエラーは起きなくなるけれど、fuel/app/config/config.php は
oil create をして作成されるファイルなので、新しいプロジェクトを作る度に
config.php の編集とchmodしないといけないのでちょっち面倒。
phpインストールしたらtimezoneの設定ぐらいするよねー
と言ってしまえばおしまいだけどね!