参考にさせて頂いたページ
CakePHPのディレクトリの移動と複数サイトの管理 | TomoSoft
はじめに
応用インストールの「複数のアプリケーションで CakePHP を共有する」の項目あたりを読むのが一番良さそう。
httpd.confを編集してDocumentRootを変更する
su
vagrant(パスワード)
vim /etc/httpd/conf/httpd.conf
で編集する。
これまではDocumentRootを
DocumentRoot "/var/www/html/"
として、そこにcakephpのディレクトリを丸ごと配置していた。
今回けっこうハマったので、この記事を少しでもわかりやすく書こうと思って、DocumentRootを以下のように変更した。
DocumentRoot "/var/www/html/webroot"
ディレクトリ構造を変更する
まずvagrantの仮想環境内において、以下のようにサーバーのルート直下にcakephpディレクトリを丸ごと配置しなおした。
/cakephp
/CONTRIBUTING.md
/README.md
/app
/build.properties
/build.xml
/composer.json
/index.php
/lib
/plugins
/vendors
/webroot
上記の中からwebrootディレクトリだけを取り出して以下のように配置する
/var/www/html/webroot
ディレクトリ構造の変更はこれで完了。
/var/www/html/webroot/index.phpの編集
ROOTの編集
以下のようにしました。もともとあった記述もコメント化して残しています。
サーバーの/cakephp/にCakePHPのコアディレクトリを配置したので、以下の通り。スラッシュの代わりにDSを入れる。
/**
* The full path to the directory which holds "app", WITHOUT a trailing DS.
*
*/
if (!defined('ROOT')) {
// define('ROOT', dirname(dirname(dirname(__FILE__))));
define('ROOT', dirname(DS.'cakephp'.DS.'.'));
}
上記コードのdefine('ROOT', dirname(DS.'cakephp'.DS.'.'));
の部分の最後の'.'
は必要みたい。
APP_DIRの編集
上記で設定したROOTから見てAPPディレクトリはどこにあるかの設定です。
上記で設定したROOT階層内にあるappディレクトリがそれに当たるので以下のようになると思います。
/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
// define('APP_DIR', basename(dirname(dirname(__FILE__))));
define('APP_DIR', 'app');
}
CAKE_CORE_INCLUDE_PATHの編集
これはlibディレクトリのある場所をフルパスで書くので、設定したROOTと文字列結合して、以下のようになります。
//define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
とコメントアウトされていた箇所を
define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
にします。
apacheを再起動する
ということで、以下のようなコマンドで再起動します。
su
vagrant(パスワード)
service httpd restart
service httpd restart
二回やらないとOK出ないかも。
表示を確認してみる
以下のURLで確認できると思います。
http://192.168.33.10/my_sample_datas/hoge
URLの変化
今回のディレクトリ構造の変更によって
例えばこれまで
http://192.168.33.10/cakephp/my_sample_datas/hoge
で確認していたページは、
http://192.168.33.10/my_sample_datas/hoge
で確認するようになった。
まぁ、本来こういうURLで使う気がする。
おまけ
よくわからないときは戻り値をechoしてみる
ROOTのところにもともと書いてあったdirname(dirname(dirname(__FILE__)))
が何をreturnしているのかは、
echo(dirname(dirname(dirname(__FILE__))));
と書くことで確認できる。
APP_DIRのところに最初に書いてあったbasename(dirname(dirname(__FILE__)))
が何をreturanしているのかは、
echo(basename(dirname(dirname(__FILE__))));
と書くことで確認できるので、それをもとにご自分の環境に当てはめてみると良いと思います。
echo(dirname(DS.'cakephp'.DS.'.'));
なども試しながら記述の参考にすると良さそう。
Vagrantfileについて
vagrantその17 仮想環境にcakephpをインストールしてみる - MOTOMICHI WORKS BLOGで以前躓いたところで、vagrant特有の問題もあるので、以下のようなエラーが出ていたら、
Warning: _cake_core_ cache was unable to write 'cake_dev_ja' to File cache in /vagrant/lib/Cake/Cache/Cache.php on line 323
- ディレクトリ構造のミスではない
/var/www/html/webroot/index.php
の記述内容のミスではない
ので、落ち着いてVagrantfileを編集しましょう。
webroot1, webroot2みたいに増やす方法
バーチャルホストの例 - Apache HTTP サーバ バージョン 2.2
の「一つの IP アドレスでいくつかの名前ベースの ウェブサイトを実行する」の項目や
テックノート – 【Apache】サブドメインごとに参照するディレクトリを設定する方法
などのような感じで、バーチャルホストの設定をしてあげたら良さそう。
webrootが増えたら、それぞれROOTやAPP_DIRが設定できる。
今回はここまで。