MacでCakePHPの開発環境を整える

  • 2008.02.08
  • PHP

MacでCakePHPの開発環境を整えたときのメモ。CakePHPガイドブックを見ながら作業した。

  • CakePHPのインストール
  • MacのApacheの設定
  • MySQLのインストール

 

■CakePHPのインストール

インストールというよりは、ファイルを置いておくという感じかな。

ダウンロードは、CakePHPのサイトから。

http://www.cakephp.org/

 

解凍したら、自分のサイトディレクトリに置く。

自分のホームディレクトリ/サイト/cake/

 

cake_1.1.19.6305のように長いディレクトリ名は cake のように短くしておく。好みもあるけど、単純に分かりやすいから。

 

■Apacheを起動してアクセスする

Apacheを起動する。 

システム環境設定 > 共有 > パーソナルWeb共有

 

■PHPを有効にする。

/etc/httpd/httpd.conf の以下2行のコメントを外して有効にする。

(MacOS 10.5では、/etc/apache2/httpd.conf を編集する)

LoadModule php4_module        libexec/httpd/libphp4.so
AddModule mod_php4.c 

Apacheを停止してから、起動する。

 

とりあえず、Safariでアクセスして、「CakePHP Rapid Development」が表示されればOK。

http://localhost/~自分のログイン名/cake/index.php

 

■PHPの設定ファイルを用意する

/etc/php.iniを用意する。

$ sudo cp /etc/php.ini.default /etc/php.ini  

 

 

■Apacheを再度設定する

mod_rewriteが使えるようになっていることを確認する。

(MacOS 10.5では、/etc/apache2/httpd.conf を編集する)

/etc/httpd/httpd.conf 

LoadModule rewrite_module     libexec/httpd/mod_rewrite.so
AddModule mod_rewrite.c

 

.htaccessを使えるようにする。

/etc/httpd/users を /etc/httpd/users.BAK として「ディレクトリ単位」でバックアップしておく。

/etc/httpd/users 内にある設定ファイルは「全て」apacheが読み込んでしまうため、注意する。

/etc/httpd/users/自分のログイン名.conf

<Directory "/Users/FinalCut/Sites/">
#   Options Indexes MultiViews
    Options Indexes MultiViews FollowSymLinks
#   AllowOverride None
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory> 

(Indexesはディレクトリ内を一覧できるので便利だけど、本番環境では利用しないことが多い)

(MultiViewsも日本語・英語の両方でコンテンツを提供する *.html.ja や *.html.en を使わなければ外しておく)

(MacOS 10.5では、/etc/apache2/users/自分のログイン名.conf を編集する。httpd.conf -> extra/httpd-userdir.conf -> users/*.conf という遠回りなIncludeが指定してある。)

 

上記の設定で、http://localhost/cake/をブラウザでアクセスするとエラーになるはず。

それでよし。以下の設定を行う。 

 

■3つの.htaccessファイルにRewriteBaseを設定する

自分のホームディレクトリ/Sites/cake/.htaccess を編集して、RewriteBaseの行を加える

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase   /~自分のホームディレクトリ名/cake/
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>  

 

自分のホームディレクトリ/Sites/cake/app/.htaccess を編集して、RewriteBaseの行を加える。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase   /~自分のホームディレクトリ名/cake/app/
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
 </IfModule>

 

自分のホームディレクトリ/Sites/cake/app/webroot/.htaccess を編集して、RewriteBaseの行を加える。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase   /~自分のホームディレクトリ/cake/webroot/
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

 

▼これは、間違い。 

RewriteBase   /~自分のホームディレクトリ名/Sites/cake/

▼これは、正しい。

RewriteBase   /~自分のホームディレクトリ/cake/

 

なぜなら、http://localhost/~自分のホームディレクトリ/cake/ をリライトの基本にしますよ。という指示だから。

 

 

■MySQLをインストール

MySQL5.0をダウンロードした。バージョンは今回とりあえずどうでもいい。 

http://dev.mysql.com/downloads/mysql/5.0.html#macosx-dmg 

 

dmgをダブルクリックでマウントして、mysql-5.0…pkgをインストールする。

MySQLStartupitem.pkgは、自動起動したい人用なので必要なし。

MySQL.prefPaneは、システム環境設定でMySQLを起動停止できるので、ダブルクリックしてインストールしておいた。

 

■MySQLを起動する 

システム環境設定でMySQLを起動できるようにしたのでそれを利用してもよいと思う。

ただ、起動しなかった場合にエラーメッセージが表示されないので原因が分からないので手動で起動する。

rootになって手動で起動する。

# /usr/local/mysql/bin/mysqld_safe --user=mysql &

 

起動スクリプトを使って起動停止する場合、

# /usr/local/mysql/support-files/mysql.server start
# /usr/local/mysql/support-files/mysql.server stop 

 

 

■MySQLでデータベースとテーブルを作成しておく

データベースを作成する。 

mysql> create database xxxdb;
mysql> grant all privileges on xxxdb.* to tanaka@localhost identified by 'pass';

 

テーブルを作成する。

create table customers (
id bigint(20) not null auto_increment,
name varchar(50) binary not null,
tel varchar(15) binary not null,
created datetime not null,
modified datetime not null,
primary key(id)
) type=MyISAM;

create table order_records (
id	bigint(20) not null auto_increment,
name	varchar(250) binary default null,
customer_id	bigint(20) not null,
order_date datetime not null,
flag_finished	tinyint(4)	not null,
created	datetime not null,
modified	datetime not null,
primary key(id)
) type=MyISAM; 

 

 

■MySQLへの接続情報をCakePHPに教える

データベースへの接続設定ファイル

自分のホームディレクトリ/Sites/cake/app/config/database.php

database.php.defaultをコピーしてdatabase.phpを作成する。

class DATABASE_CONFIG
{
	var $default = array('driver' => 'mysql',
								'connect' => 'mysql_connect',
								'host' => 'localhost',
								'login' => 'user',
								'password' => 'password',
								'database' => 'project_name',
								'prefix' => '');

	var $test = array('driver' => 'mysql',
							'connect' => 'mysql_connect',
							'host' => 'localhost',
							'login' => 'user',
							'password' => 'password',
							'database' => 'project_name-test',
							'prefix' => '');
}
?> 

 

ブラウザでhttp://localhost/~自分のログイン名/cake/index.php にアクセスしてWarningが出なければOK。

MySQLが作成するSocket:  /tmp/mysql.sock

PHPが探すSocketの場所:  /var/mysql/mysql.sock 

なので、 この違いのためWarningが出るはず。

 

解決策は2つ。

  1. PHPの設定を変更してソケットファイルを探す場所を変更する。
  2. MySQLがソケットファイルを作成する場所を変更する。

今回は、PHPの設定を変更して、/tmp/mysql.sockを探すようにした。

 

 

■PHPの設定を変更してソケットファイルを探す場所を変更する場合

さきほど作った/etc/php.iniを編集してソケットの場所を教えてあげる。

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /tmp/mysql.sock

Apacheを再起動する。

 

面倒だったら、Macを再起動するのが簡単。

 

 

■MySQLがソケットファイルを作成する場所を変更する場合(参考情報)

/etc/my.cnfを修正すればよい。/usr/local/mysql/support-files/my-medium.cnfをコピーして/etc/my.cnfを作成する。

$ sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf 

サーバの設定

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock 

クライアントの設定

[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock 

MySQLを再起動する。