symfonyチュートリアル実践【第1~2日目】
24日分に分かれたチュートリアルの1~2日目(3日目は非公式?)は日本語訳もありますがあきらめて英語のチュートリアル参照。
用意した環境は、FedoraCore5にRPMでPHP5.1.6、apache2.2.2、MySQL5.0.22。
最初に悩んだのが
$ pear install symfony/symfony-beta
βの方がいいのか?うーん。stable(0.6.3)でいくことにした。
$ pear install symfony/symfony
httpd.confの設定でAllowOverride Allとしているのも速度的にどうなんだろう、とこの辺りは本番環境で変える必要がありそうです。
ローカルだけで動かしているマシンではないのでServerName askeetとなっている箇所は削除。
Subversionの設定の箇所は飛ばしました。
Congraturations!が表示されるまでは無事終了。
リアルに1日ずつやっていたら飽きること間違いなしなので勢いでやりつつブログ書いて自分にプレッシャーかける戦法で。
最初のsvn renameはSubversionを使っていないので単にmv。InnoDBの設定は無視。で、
$ symfony propel-build-model
のところで早速、
PHP Fatal error: Class 'DomDocument' not found in ~
というエラー。
PHP: DOM XML Functions – Manual
これがPHP5にはついているそうですがFedora5のPHPは–disable-domになっていたので
# yum install php-dom
としてphp-xmlをインストール。これで解決。
最初はそのまますんなりいき、ブラウザで
http://askeet/question
にアクセス!
が、Oops!と怒られ500エラー。apacheのエラーログには何も出てこないので、デバッグの仕方がわからずとりあえずフォーラムで検索。
1日目にちゃんと書いてあったのを読め、という話ですが
http://askeet/frontend_dev.php/question
にアクセスするとデバッグモードになり、Syntax errorが発生していることが判明。エラー箇所のコードを眺めると
$database = new Array();
とここでエラーになっていてこんな構文あったっけ、とひとしきり悩む。
同じエラーに悩まされている方がフォーラムにいらっしゃり、config/databases.ymlの記述がどうもおかしい、と判明。new Array()の部分は、コードが自動生成されたときに値がなくてArrayとechoされたのかな、と推測されます。
僕のコピペ時の凡ミスでしたが、YAMLはインデントに要注意です。
気を取り直して
$ symfony propel-build-schema
から再度コマンドを打っていくと
$ mysql -u youruser -p askeet < data/sql/schema.sql
今度はここでエラー。最初はうまくいったのになぜ。。
ERROR 1064 (42000) at line 32: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL,
`user_id` INTEGER default NOT NULL,
`created_at` DATETIME,
PRIMARY' at line 3
“default”を消すとうまくいくわけですが、config/schema.xmlの記述がおかしいのでしょうか。フォーラムにも同じエラーが報告されていますがレスがついていないので詳細は不明。
手動でschema.sqlを編集して先へ進み、
$ symfony cc frontend config
を忘れずに実行して再びブラウザでアクセスすると今度はうまくいきました。
続く。