2015年4月1日水曜日

CakePHP 3.0でgitを使ったデプロイの覚書

ちょっと前にCakePHP 3.0がリリースされたようなので、落とし穴が多いことは覚悟で実践で使ってみた。

で、最初から躓いたのでメモを残す。

問題


普通、手元のPCに開発環境としてCakePHPを動かせる環境を作っておいて、こちらで開発&ある程度デバッグしたところで、本番サーバにgit経由などでデプロイするケースが多いと思う。

CakePHPも今はGitHubでホスティングされていることもあって、最初から運用を意識した.gitignoreが用意されているんだけども、
  1. 手元の開発環境で
    php composer.phar create-project --prefer-dist cakephp/app [app_name]
    して、CakePHP3のプロジェクトを新規作成
  2. このプロジェクト用gitリポジトリにgit commit&git push (このときgitignoreによりbin/logs/tmp/venderなどはコミットから外れる)
  3. 本番サーバでgit pull
としたとき、gitignoreで外されたvenderディレクトリ内のフレームワーク本体や、bin/logs/tmpなどディレクトリは、どうやって本番環境に持っていけばいいのかわからなかった。
公式ドキュメント調べても、特に書いてなかった。
リリースされたばっかりなので、ブログやstackoverflowなどにも載ってなかった。

解決方法


おそらく、上記3の後に、
  1. 本番環境側にもcomposerをインストール
    上記app_nameディレクトリに移動してから
    curl -s https://getcomposer.org/installer | php
  2. 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 
    
  3. 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
だけで最低動作環境はクリアできる。