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

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