Mac OS X 10.5.x環境でsymfonyやってみようと思っている人へ

せっかくMacにはApache2.x系とphpがもともとインストールされていて使える環境が構築されているんだしMySQLも公式サイトにdmgパッケージあるんだし、と持って、オリジナルの環境を使ってsymfony環境を作ってみよう、と思ったのですが、

結論から先に言うと、できなかったので諦めました(-_-)

すごい時間をかけたのですが…もしかしたら、もうちょっと粘ったらできたかもしれません。でも、もうこれ以上時間をかけても自分には益がないなーと判断して諦めました。ちなみに、symfonyがちゃんと動いてくれなかったその環境では、php + MySQLで運用しているMovable Type4.26とJoomla!1.5は問題なく動いています。あと、私が最初試してみたのはsymfony1.4ですが、1.3、1.2でもやってみたのですがダメでした。



具体的に躓いたところ

Practical symfonyというチュートリアルの「Day 1: Starting up the Project」に従って環境設定を行いました。

symfony configuration checker scriptをダウンロードして走らせて、警告の出ていたところをひとつひとつクリアして、全部OKにしたんでしけどねー…。

symfonyは/Library以下にSymfonyというディレクトリを作ってそこにインストールしました。

$ php /Library/Symfony/data/bin/symfony -V
symfony version 1.4.1 (/Library/Symfony/lib)
$

チュートリアルに従って、プロジェクトの作成、アプリケーションの作成は問題なくできました。チュートリアルと違うとこっていったら、sudoを付けてやったこと、くらい。

server:jobeet user$ sudo php /Library/Symfony/data/bin/symfony
server:jobeet user$ sudo php symfony generate:app frontend

で、
http://localhost/sfprojects/jobeet/web/
にアクセスすると、ちゃんとデフォルトページが表示されました。

問題は「Day 3: The Data Model」。データベース上にテーブルを生成するところでまずコケました:

server:jobeet user$ php symfony propel:insert-sql --no-confirmation
>> schema converting "/Library/WebServer/Documents/sfprojects/jobeet/config/schema.yml" to XML
>> schema putting /Library/WebServer/Documents/sfprojects/jobeet/config/generated-schema.xml
>> propel Running "insert-sql" phing task
Execution of target "insert-sql" failed for the following reason: /Library/Symfony/lib/plugins/sfPropelPlugin/lib/vendor/propel-generator/build-propel.xml:272:1: [wrapped: could not find driver]
[phing] /Library/Symfony/lib/plugins/sfPropelPlugin/lib/vendor/propel-generator/build-propel.xml:272:1: [wrapped: could not find driver]

Some problems occurred when executing the task:

build-propel.xml:272:1: [wrapped: could not find driver]

If the exception message is not clear enough, read the output of the task for
more information

>> file- /Library/WebServer/Documents/sfprojects/jobeet/config/generated-schema.xml
server:jobeet user$

ここの、

Some problems occurred when executing the task:

build-propel.xml:272:1: [wrapped: could not find driver]

If the exception message is not clear enough, read the output of the task for
more information

のところが、赤地に白ヌキ文字で表示されていかにも「いけません!」っていう感じ(泣)

could not find driverということなので、DB接続ドライバーがないというエラーなのね、と。
build-propel.xml:272:1: [wrapped: could not find driver] をググったら、確かに、phpinfo()で見てみたらPDOのところにpdo_mysqlがありませんでした。

POD_MYSQLhttp://pecl.php.net/package/PDO_MYSQLからダウンロードしてきて、以下の感じで実行。

server:Desktop user$ cd PDO_MYSQL-1.0.2/PDO_MYSQL-1.0.2
server:PDO_MYSQL-1.0.2 user$ phpize
server:PDO_MYSQL-1.0.2 user$ ./configure '--with-pdo-mysql=shared,/usr/local/mysql'
server:PDO_MYSQL-1.0.2 user$ sudo make install

それから、php.iniに以下の2行を追加。

extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20060613"
extension=pdo_mysql.so

で、

$ php -i |grep pdo
pdo_mysql
pdo_sqlite
PECL Module version => (bundled) 1.0.1 $Id: pdo_sqlite.c 272374 2008-12-31 11:17:49Z sebastian $
OLDPWD => /usr/include/php/ext/pdo
_SERVER["OLDPWD"] => /usr/include/php/ext/pdo
_ENV["OLDPWD"] => /usr/include/php/ext/pdo

この後、再びphp symfony propel:insert-sql --no-confirmationをしてみると、今度は警告なくできました。

その後、さくさくとチュートリアルを終え、さあ表示してみましょう、ってときに、

http://localhost/sfprojects/jobeet/web/frontend_dev.php/job

でエラー画面。

500 | Internal Server Error | PropelException
Unable to open PDO connection [wrapped: SQLSTATE[28000] [1045] Access
denied for user 'user'@'localhost' (using password: NO)]

あれ、さっきインストールしたはず…

$ php -i | grep PDO
PDO
PDO support => enabled
PDO drivers => sqlite, sqlite2, mysql
PDO Driver for MySQL, client library version => 5.0.82
PDO Driver for SQLite 3.x => enabled

この後ググりまくり、pod_mysqlコンパイルしなおしたりあれこれ再インストールしたりしたのですが、先のエラー画面から一歩も前へ進めませんでした。

この件にはほうんとうに疲弊しましたよもう…

まあ、自分の環境は開発・テスト環境なので、現行の環境はMTやJoomla!用にそのままイキにして、MacPortを使ってもういっこ環境を作りsymfonyはそこで扱うことにしました。MacPortは/opt以下に全てをインストールするので、やっぱやーめた、となったら/opt以下を捨てちゃえばいいだけだし。

http://www.macports.org/
http://macwiki.sourceforge.jp/wiki/index.php/MacPorts

フルパスをいつも打ち込むのがめんどうくさかったので、/opt/local/binと/opt/local/sbinにPATHを通しました。なので、MacPort以下のapachemysqlサーバを使って何かするときにはオリジナルのapachemysqlサーバは止めて使うことにしました。