Home > PHP > CakePHP 複数コア のお手軽バージョン管理 : CakePHP Advent Calendar 2011 Day 15

CakePHP 複数コア のお手軽バージョン管理 : CakePHP Advent Calendar 2011 Day 15

  • 2011-12-15 (木) 23:57
  • PHP

CakePHP Advent Calendar 2011 15日目のエントリです。
※ 12/16追記 : こっそり、解説文を書き足しました
※ 12/18追記 : さらに改訂(汗)。

※ 前日( 14日目 )のエントリーは @kaz_29 さんの 『 CakePHP2+PostgreSQLでGeoデータを簡単に扱う!? 』です。

新しいバージョン・リリースのたびに発生するバージョンアップ作業ですが、ソースコードの取得と配置といった定形作業をスクリプト化する方法( 簡単コース )と、はじめからCakePHPコアのバージョン管理を git で行う方法( Gitコース )を考えてみました。
※ インストール方法はCakePHP Cookbook の 応用インストール手順 をベースにしています

簡単コースのスクリプトは github のリポジトリから CakePHP のソースコードを取得し、ディレクトリ単位でバージョン管理するので git を知らなくても大丈夫です。一度設定すれば、スクリプトを実行するだけの簡単バージョンアップ!

Gitコースのバージョンアップは git pull コマンドが使えます。
※ こちらは git を普段から使っているプログラマー向け

A.簡単コースの解説

A-1 : 作業の前提となるディレクトリ構成

ユーザーディレクトリを使う場合を例に以下のディレクトリ構成で話を進めます。
※ CakePHP 1.3 と 2.0 の複数コアを扱うため、Cookbookとは配置を変えてあります

~/cakephp/cake_core_1.3 CakePHPコア 1.3
~/cakephp/cake_core_2.0 CakePHPコア 2.0
~/cakephp/plugins プラグイン
~/cakephp/vendors ベンダー・ライブラリー
~/cakephp/app 開発するアプリケーションを配置
~/cakephp/tmp 作業用 : CakePHPコアの一時置き場

A-2 : ディレクトリの用意

まず、CakePHPコアを配置するディレクトリと作業用のディレクトリなどを作ります。

sh make-dirs.sh

※ スクリプトのソースコードは A-6 にまとめてありますので、お使いください

A-3 : cakeコマンドへのalias設定

必須ではありませんが、複数バージョンのcakeコマンドを使い分けるために .bashrc などで alias を設定しておくと便利です。

alias cake13='~/cakephp/cake_core_1.3/cake/console/cake'
alias cake20='~/cakephp/cake_core_2.0/Cake/Console/cake'

A-4 : ソースコードの取得と配置

次に CakePHP 1.3 のソースコードを github の リポジトリ から取得し、必要なコアだけを配置するスクリプトを実行します。

% sh get-cakephp-1.3.sh
Cloning into cakephp...
remote: Counting objects: 138190, done.
remote: Compressing objects: 100% (27658/27658), done.
remote: Total 138190 (delta 109350), reused 134528 (delta 106944)
Receiving objects: 100% (138190/138190), 18.88 MiB | 4.37 MiB/s, done.
Resolving deltas: 100% (109350/109350), done.
Branch 1.3 set up to track remote branch 1.3 from origin.
Switched to a new branch '1.3'

CakePHPコアを配置しました : /home/foo/cakephp/cake_core_1.3/cakephp-1.3-2011-1215-2225

スクリプト一発で、1.3のソースコードを git clone し、make-dirs.sh で準備しておいた配置ディレクトリへコアの配置とスクリプト実行時のバージョンを最新版としたシンボリックリンクが設定されます。

1.3コアの配置先 : ~/cakephp/cake_core_1.3/cakephp-1.3-年-月日-時分
1.3コアの最新版 : ~/cakephp/cake_core_1.3/cake

CakePHP 2.0 はコアのpathが少し違っているので、別に get-cakephp-2.0.sh を用意しました。

% sh get-cakephp-2.0.sh
Cloning into cakephp...
remote: Counting objects: 138190, done.
remote: Compressing objects: 100% (27658/27658), done.
remote: Total 138190 (delta 109350), reused 134528 (delta 106944)
Receiving objects: 100% (138190/138190), 18.88 MiB | 3.11 MiB/s, done.
Resolving deltas: 100% (109350/109350), done.
Branch 2.0 set up to track remote branch 2.0 from origin.
Switched to a new branch '2.0'

CakePHPコアを配置しました : /home/foo/cakephp/cake_core_2.0/cakephp-2.0-2011-1215-2225


2.0コアの配置先 : ~/cakephp/cake_core_2.0/cakephp-2.0-年-月日-時分
2.0コアの最新版 : ~/cakephp/cake_core_2.0/Cake

上記スクリプトの実行を繰り返すたびに最新版を示すシンボリックリンクも更新していますので、このリンクを貼り直すことで、CakePHPコアに何か問題があった場合 や 障害などの切り分けに活用しています。

% ls -l ~/cakephp/cake_core_1.3
合計 8
lrwxrwxrwx 1 foo foo   26 2011-12-15 22:25 cake -> cakephp-1.3-2011-1215-2225/
drwxrwxr-x 6 foo foo 4096 2011-12-15 22:24 cakephp-1.3-2011-1215-2224/
drwxrwxr-x 6 foo foo 4096 2011-12-15 22:25 cakephp-1.3-2011-1215-2225/

% ls -l ~/cakephp/cake_core_2.0
合計 8
lrwxrwxrwx  1 foo foo   26 2011-12-15 22:26 Cake -> cakephp-2.0-2011-1215-2225/
drwxrwxr-x 18 foo foo 4096 2011-12-15 22:24 cakephp-2.0-2011-1215-2224/
drwxrwxr-x 18 foo foo 4096 2011-12-15 22:26 cakephp-2.0-2011-1215-2225/

※ 過去バージョンへの切戻し( リンクの張替え )は今のところ手動でやってます(汗)

A-5 : フロント側の設定

あとは CakePHP の 複数コア配置 に合わせて、フロント側のwebroot( ~/cakephp/app/アプリケーション名/ )の index.php と test.php で APP_DIR、ROOT、CAKE_CORE_INCLUDE_PATH を設定すればOKです。


define( 'APP_DIR',					'アプリケーション名' );
define( 'ROOT',                     '/ホームディレクトリのパス/cakephp/app' );

define( 'CAKE_CORE_INCLUDE_PATH',   '/ホームディレクトリのパス/cakephp/cake_core_1.3' );

 または

define( 'CAKE_CORE_INCLUDE_PATH',   '/ホームディレクトリのパス/cakephp/cake_core_2.0' );

A-6 : 簡単コースで使用したスクリプト

配置用のディレクトリ作成スクリプト(↓)です。

#!/bin/bash

CAKEPHP=~/cakephp

CAKE_CORE_13=$CAKEPHP/cake_core_1.3
CAKE_CORE_20=$CAKEPHP/cake_core_2.0
APP=$CAKEPHP/app
PLUGINS=$CAKEPHP/plugins
VENDORS=$CAKEPHP/vendors
TMP=$CAKEPHP/tmp

if [ ! -d $CAKE_CORE_13 ]; then mkdir -p $CAKE_CORE_13; fi
if [ ! -d $CAKE_CORE_20 ]; then mkdir -p $CAKE_CORE_20; fi
if [ ! -d $APP          ]; then mkdir -p $APP; fi
if [ ! -d $PLUGINS      ]; then mkdir -p $PLUGINS; fi
if [ ! -d $VENDORS      ]; then mkdir -p $VENDORS; fi
if [ ! -d $TMP          ]; then mkdir -p $TMP; fi

CakePHPのGitリポジトリからソースコードを取得&配置するスプリプト(↓)です。

#!/bin/bash

CAKEPHP_VER=1.3

CAKEPHP=~/cakephp
## TODAY=`date +%Y-%m%d`
TODAY=`date +%Y-%m%d-%H%M`
CAKE_CORE=$CAKEPHP/cake_core_$CAKEPHP_VER
CAKE_VER_TODAY=cakephp-$CAKEPHP_VER-$TODAY
TMP=$CAKEPHP/tmp

if [  -d $CAKE_CORE/$CAKE_VER_TODAY ]; then
    echo $CAKE_CORE/$CAKE_VER_TODAY が既にあります。
    exit
fi

cd $TMP
git clone git://github.com/cakephp/cakephp.git
mv cakephp $CAKE_VER_TODAY
cd    $TMP/$CAKE_VER_TODAY
git checkout $CAKEPHP_VER

cd $TMP/$CAKE_VER_TODAY
cp -a ./cake/ $CAKE_CORE/$CAKE_VER_TODAY

cd $CAKE_CORE

if [ -e $CAKE_CORE/cake ]; then
    rm  $CAKE_CORE/cake
fi

ln -s $CAKE_VER_TODAY cake

chmod -R +w $TMP/$CAKE_VER_TODAY
rm -r $TMP/$CAKE_VER_TODAY

echo
echo CakePHPコアを配置しました : $CAKE_CORE/$CAKE_VER_TODAY
echo
#!/bin/bash

CAKEPHP_VER=2.0

CAKEPHP=~/cakephp
## TODAY=`date +%Y-%m%d`
TODAY=`date +%Y-%m%d-%H%M`
CAKE_CORE=$CAKEPHP/cake_core_$CAKEPHP_VER
CAKE_VER_TODAY=cakephp-$CAKEPHP_VER-$TODAY
TMP=$CAKEPHP/tmp

if [  -d $CAKE_CORE/$CAKE_VER_TODAY ]; then
    echo $CAKE_CORE/$CAKE_VER_TODAY が既にあります。
    exit
fi

cd $TMP
git clone git://github.com/cakephp/cakephp.git
mv cakephp $CAKE_VER_TODAY
cd    $TMP/$CAKE_VER_TODAY
git checkout $CAKEPHP_VER

cd $TMP/$CAKE_VER_TODAY/lib
cp -a Cake $CAKE_CORE/$CAKE_VER_TODAY

cd $CAKE_CORE

if [ -e $CAKE_CORE/Cake ]; then
    rm  $CAKE_CORE/Cake
fi

ln -s $CAKE_VER_TODAY Cake

chmod -R +w $TMP/$CAKE_VER_TODAY
rm -r $TMP/$CAKE_VER_TODAY

echo
echo CakePHPコアを配置しました : $CAKE_CORE/$CAKE_VER_TODAY
echo

B.Gitコースの解説

B-1 : 作業の前提となるディレクトリ構成

~/cakephp/cakephp_1.3 CakePHP 1.3 ローカルリポジトリ
~/cakephp/cakephp_2.0 CakePHP 2.0 ローカルリポジトリ
~/cakephp/plugins プラグイン
~/cakephp/vendors ベンダー・ライブラリー
~/cakephp/app 開発するアプリケーションを配置

B-2 : ディレクトリの用意

mkdir -p ~/cakephp/app
mkdir -p ~/cakephp/plugins
mkdir -p ~/cakephp/vendors

※ 簡単コースの A-2 でディレクトリを用意した場合はそのままでも大丈夫です

B-3 : cakeコマンドへのalias設定

必須ではありませんが、複数バージョンのcakeコマンドを使い分けるために .bashrc などで alias を設定しておくと便利です。

alias cake13='~/cakephp/cakephp_1.3/cake/console/cake'
alias cake20='~/cakephp/cakephp_2.0/lib/Cake/Console/cake'

※ 簡単コースの A-3 とは異なるパスを指定

B-4 : Gitリポジトリの用意( ソースコード取得 )

cd ~/cakephp
git clone git://github.com/cakephp/cakephp.git cakephp_1.3
cd ~/cakephp/cakephp_1.3
git checkout 1.3

cd ~/cakephp
git clone git://github.com/cakephp/cakephp.git cakephp_2.0
cd ~/cakephp/cakephp_2.0
git checkout 2.0

バージョンアップは 各メジャーバージョンのリポジトリ・ディレクトリで git pull を実行。

cd ~/cakephp/cakephp_1.3
git pull

cd ~/cakephp/cakephp_2.0
git pull

B-5 : フロント側の設定

あとは CakePHP の 複数コア配置 に合わせて、フロント側のwebroot( ~/cakephp/app/アプリケーション名/ )の index.php と test.php で APP_DIR、ROOT、CAKE_CORE_INCLUDE_PATH を設定すればOKです。


define( 'APP_DIR',					'アプリケーション名' );
define( 'ROOT',                     '/ホームディレクトリのパス/cakephp/app' );

define( 'CAKE_CORE_INCLUDE_PATH',   '/ホームディレクトリのパス/cakephp/cakephp_1.3' );

 または

define( 'CAKE_CORE_INCLUDE_PATH',   '/ホームディレクトリのパス/cakephp/cakephp_2.0' );

おしまい

以上、ざっくりとした解説なので スクリプトのカスタマイズ とか質問があれば @scriptwork までご連絡ください。

それでは、明日の CakePHP Advent Calendar 2011 16日目は @bimihoujyun さんです。

Home > PHP > CakePHP 複数コア のお手軽バージョン管理 : CakePHP Advent Calendar 2011 Day 15

Fedora 20
アーカイブ

Return to page top