ちょっと前にCakePHP 3.0がリリースされたようなので、落とし穴が多いことは覚悟で実践で使ってみた。
で、最初から躓いたのでメモを残す。
問題
普通、手元のPCに開発環境としてCakePHPを動かせる環境を作っておいて、こちらで開発&ある程度デバッグしたところで、本番サーバにgit経由などでデプロイするケースが多いと思う。
CakePHPも今はGitHubでホスティングされていることもあって、最初から運用を意識した.gitignoreが用意されているんだけども、
- 手元の開発環境で
php composer.phar create-project --prefer-dist cakephp/app [app_name]
して、CakePHP3のプロジェクトを新規作成
- このプロジェクト用gitリポジトリにgit commit&git push (このときgitignoreによりbin/logs/tmp/venderなどはコミットから外れる)
- 本番サーバでgit pull
としたとき、gitignoreで外されたvenderディレクトリ内のフレームワーク本体や、bin/logs/tmpなどディレクトリは、どうやって本番環境に持っていけばいいのかわからなかった。
公式ドキュメント調べても、特に書いてなかった。
リリースされたばっかりなので、ブログやstackoverflowなどにも載ってなかった。
解決方法
おそらく、上記3の後に、
- 本番環境側にもcomposerをインストール
上記app_nameディレクトリに移動してから
curl -s https://getcomposer.org/installer | php
- githubのcakephp/appからbin/logs/tmpを取ってくる。方法は色いろあると思うけど、以下のようにすると楽だった
svn export https://github.com/cakephp/app/trunk/bin
svn export https://github.com/cakephp/app/trunk/logs
svn export https://github.com/cakephp/app/trunk/tmp
- composerを使って依存関係にあるライブラリをvenderディレクトリに入れ、自動実行されるCakePHPのインストールスクリプトを使ってパーミッションも付与する
php composer.phar -n install
のようにするのが正解ではないかと思う。みんな困るはずなので、そのうちもっとスマートな方法が提案される気もするけどね。
おまけ
CakePHP 3.0はPHPのintl extensionに依存してるんだけど、MacOSXの場合、homebrewを使ってintlモジュールを入れようとすると
brew install php53-intl
など、PHP本体とは別にintlモジュールを入れる必要があると書いてあることが多かった。
でも、実際に
brew search php5
で検索すると、-intlがついてるモジュールは見当たらない。
困ったので色々調べてみたら、ちょっと前からphp本体にintlモジュールを組み込んだ状態で配布する形式に変わったようだった。
なので、
brew install homebrew/php/php56
だけで最低動作環境はクリアできる。