Windows上で使っていたSymfonyをインターネット上でも使えるようにしてみました。DreamhostとSymfonyの組み合わせは大容量のストレージを必要とするサービスに利用するのにちょっと便利な組み合わせなので(遅いけど)インストール記録をメモ。
ちなみにPHPのフレームワークは数が多く出ているのでどれを選択すべきか最初困ってしまいましたがSymfonyを選びました。本当は全部使ってみて自分なりに区別して使いたいところだけどそんな余裕ないです。ここの記事を参考にしたというのもありますが、他にも色々とチェックしてみたところ
- ドキュメントが豊富(英文しかないけど)
- Symfony1系は向こう10年くらいエンタープライズ用にメンテナンスが継続されることを正式に発表
- PHP5のみという潔さ!
という理由で即決でしたw でもSymfonyは他のフレームワークに比べて遅いようですね。HelloWorldを繰り返し表示させるだけのベンチマークなので鵜呑みにはできませんが、速度に主眼を置く場合考慮した方がいいかも。ただ、速度を気にするような大規模サービスならDBの速度の方が大事だと思います。O/Rマッパーの速度比較の方がうれしいかも。
上記のサイトで「CakePHPは良いものだが開発の速度が遅い」と評していると、コメント欄に「開発速度が遅いだと?一日にどれだけコードをコミットしているのかtracを見てみろ!一番開発速度の速いフレームワークだと言っておく」とCakePHPの開発者メンバからレスがついているところが面白いw 使う側からすると適材適所で使い分けていければ良いので、速度で競うよりも特色で競ってくれた方がうれしいなぁ。
さてインストールメモ。
Dreamhostのコントローラを使って使用するドメインのPHPバージョンを5に変更。
次に個人用pearのインストール。
$ /usr/local/php5/bin/pear config-create $HOME .pearrc
$ /usr/local/php5/bin/pear install –alldeps PEAR
ここで次のようにエラーがでる。
Notice: Undefined variable: php_errormsg in Downloader.php on line 1498
Could not download from “http://pear.php.net/get/PEAR-1.5.1.tgz”, cannot download “pear/PEAR”
Error: cannot download “pear/PEAR”
どうも色々と調べてみたところ /tmp 配下のアクセス権がないことによるエラーらしい。DHの設定ミスか?時間が経つと勝手に直ってました。なんだったんだろう…。
.bash_profileの設定は次の通り。
PEAR_LOCAL=/home/ishiro/pear
PHP_PEAR_PHP_BIN=/usr/local/php5/bin
PATH=$PEAR_LOCAL:$PHP_PEAR_PHP_BIN:$DEFAULT_DH_ACCOUNT_PATH
これでPHP5用のPEARが個人で使えるようになりました。次にsymfonyのインストール。
$ pear channel-discover pear.symfony-project.com
$ pear remote-list -c symfony
$ pear install symfony/symfony
次に実際に簡単なアプリケーションを作ってみる。アプリケーションをインストールするディレクトリに行って次のコマンドを実行。プロジェクト名をcmsとして、アプリケーション名をfrontendとする。frontendとは利用者に見せる部分を意味する名前。管理者用に後でbackendを作成する。
$ symfony init-project cms
$ symfony init-app frontend
この状態でhttp://自分のサイト/インストールしたディレクトリ/webでアクセス可能な状態になっている。はやっ。
サービスとするならエイリアスをかけてすっきりとさせたほうが良いでしょう。DHのコントロールパネルを使って、サブドメインにcmsを作成し/home/ishiro/cms.ishiro.com/webを直接そのサブドメインにエイリアスしました。
次に作成したドメインでsymfonyの基本リソースにアクセスできるようにします。ドキュメントを読むとapacheのaliasによって実現していましたが、ただのシンボリックリンクで試してみたところあっさり動いたのでこれでいきます。こっちの方が簡単。
# ln -s /home/ishiro/pear/data/symfony/web/sf /home/ishiro/cms.ishiro.com/web/
データベース接続用の設定(cofig/database.yml)
all:
propel:
class: sfPropelDatabase
param:
phptype: mysql
host: mysql.ishiro.com
database: cms
username: *******
password: *******
propel用にも設定(config/propel.ini)
propel.database = mysql
propel.database.createUrl = mysql://mysql.ishiro.com
propel.database.url = mysql://ユーザ名:パスワード@mysql.ishiro.com/cms
データベースの作成。先にスキーマを作ります。
propel:
customer:
_attributes: { phpName: Customer }
id:
name: varchar(50)
address: varchar(30)
sex: boolean
tel: varchar(30)
mail: varchar(50)
url: varchar(50)
course_id:
branch_id:
created_at:
course:
_attributes: { phpName: Course }
id:
name: varchar(50)
summary: longvarchar
created_at:
branch:
_attributes: { phpName: Branch }
id:
account: varchar(50)
password: varchar(50)
name: varchar(50)
address: varchar(30)
tel: varchar(30)
mail: varchar(50)
url: varchar(50)
created_at:
次にこのスキーマからsqlを作ってやります。注意する点はデフォルトでは/home/ishiro/pear/php/symfony/vendor/propel-generator/build.propertiesがないのでbuild.properties-sampleをリネームすること。ベータ版の時はこんなことしなくても良かったのに正式リリースになるとこの作業が必要になってしまった。なんだろうな。
sqlの作成。
$ symfony propel-build-sql
sqlはdata/sql/lib.model.schema.sqlにできているのでMySQLにそのまま食べさせる。
データベースからモデル作成
$ symfony propel-build-model
クラスにデータベース操作用の基本メソッドを追加
$ symfony propel-generate-crud frontend customer Customer
$ symfony propel-generate-crud frontend branch Branch
$ symfony propel-generate-crud frontend course Course
これで基本的な足場となるアプリが完成。基本のレイアウト用HTMLとかちょっと修正すれば見た目も簡単に変更可能です。
http://cms.ishiro.com
管理者名とパスワードに共通の文字列”tokyo”,”osaka”,”hokkaido”と入力すればログイン可能です。ちょろっと作っただけなのでちょ~適当です(^-^;
こういうアプリケーションが数時間で手軽に作れるのだからフレームワークの威力絶大といった感じです。
デザイナさんと大量にHTMLファイルをやり取りしないで、自分で作っている限りsmartyの必要性は感じなかったです。