読者です 読者をやめる 読者になる 読者になる

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の設定ぐらいするよねー
と言ってしまえばおしまいだけどね!