Motomichi Works Blog

その日学習したことについて書いている日記です。誰かの役に立ったらそれはそれで嬉しいです。

vagrantその21 cakephpのディレクトリ構造を変更して、webrootだけを公開ディレクトリに配置する

参考にさせて頂いたページ

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を再起動する

  • httpd.confを編集したので必須
  • /var/www/html/webroot/index.phpの編集後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が設定できる。

今回はここまで。