それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

CakePHPをSqliteで動かす(MacのApache)

CakePHPに納得が行かないので、実験環境を作ることにした。手持ちのMacに作ります。MySQLを入れるのは面倒なので、Sqlite3でやります

CakePHPは /Users/takuya/Sites/cakephp で動かすことにしよう

動作させるディレクトリとURL

インストール先: /Users/takuya/Sites/cakephp 
WEBから見た先:http://localhost/~takuya/cakephp 

でアクセスできるようにします

cakephpの準備

cakephpを準備します

cd ~/Sites
git clone git://github.com/cakephp/cakephp.git
cd cakephp

githubのログを消しておく。

rm -r .git
git init 
git add 
git commit -m "initial import”

.htaccessの修正

.htaccessが肝なので、これを編集します

CAKEROOT/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase   /~takuya/cakephp
   RewriteRule   ^$ app/webroot/    [L]
   RewriteRule   (.*) app/webroot/$1 [L]
</IfModule>

同様に他のhtaccessも更新

CAKEROOT/app/.htaccess
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase   /~takuya/cakephp/app
   RewriteRule   ^$ app/webroot/    [L]
   RewriteRule   (.*) app/webroot/$1 [L]
</IfModule>
CAKEROOT/app/webroot
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteBase   /~takuya/cakephp/app/webroot/
   RewriteRule   ^$ app/webroot/    [L]
   RewriteRule   (.*) app/webroot/$1 [L]
</IfModule>

Apacheの設定

ホームディレクトリのUser空間に.htaccessを許可する

takuya@air:~/Sites/cakephp$ cat /etc/apache2/users/takuya.conf
<Directory "/Users/takuya/Sites/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

ApachePHPを動くようにする。

/etc/apache2/httpd.conf
LoadModule php5_module libexec/apache2/libphp5.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so

同時にrewriteも有効にする。

Apacheの再起動

sudo apachectl restart

PHPの確認

まずPHPの動作を確認します

echo "<?php phpinfo();?>" >> ~/Sites/info.php
curl localhost/~takuya/info.php

php.iniで設定を修正

Mountain Lionの場合 php.iniが無くなってたんで作ります。

sudo cp /etc/php.ini.default /etc/php.ini
タイムゾーンを修正する
;Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"
Apacheの再起動
sudo apachectl restart

Cakephpを起動して確認

open http://localhost/~takuya/cakephp

データベースを設定

sqlite用に設定を書きます

app/Config/database.php
class DATABASE_CONFIG {


        public $default = array(
                'datasource' => 'Database/Sqlite',
                'persistent' => false,
                'database' => '/Users/takuya/Sites/cakephp/app/tmp/my_first.sqlitedb',,
                #'database' => ':memory:',
                'prefix' => '',
                //'encoding' => 'utf8',
        );
}

データベースファイルを作っておく

app/Console/cake bake all
sudo chmod 777 -R /Users/takuya/Sites/cakephp/app/tmp

sqlite のデータファイル出来たよ

ls app/tmp/ -l
合計 0
drwxrwxrwx 5 takuya staff 170 12 21 20:32 cache
drwxrwxrwx 3 takuya staff 102 12 21 20:32 logs
-rwxrwxrwx 1 takuya staff   0 12 21 21:47 my_first.sqlitedb
drwxrwxrwx 3 takuya staff 102 12 21 20:32 sessions
drwxrwxrwx 3 takuya staff 102 12 21 20:32 tests

テーブルを作ってみて実験

sqlite3のコンソールをつかってテーブルを作ります。

sqlite3 /Users/takuya/Sites/cakephp/app/tmp/my_first.sqlitedb
流しこむテーブル定義は次の通り
CREATE TABLE users (
    id  integer NOT NULL  PRIMARY KEY autoincrement ,
    username VARCHAR(255) NOT NULL UNIQUE,
    password CHAR(40) NOT NULL,
    group_id INT(11) NOT NULL,
    created DATETIME,
    modified DATETIME
);


CREATE TABLE groups (
    id  integer NOT NULL  PRIMARY KEY autoincrement ,
    name VARCHAR(100) NOT NULL,
    created DATETIME,
    modified DATETIME
);


CREATE TABLE posts (
    id  integer NOT NULL  PRIMARY KEY autoincrement,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    body TEXT,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE widgets (
    id integer NOT NULL  PRIMARY KEY autoincrement,
    name VARCHAR(100) NOT NULL,
    part_no VARCHAR(12),
    quantity INT(11)
);

Bakeryでcake bake する

app/Console/cake bake all
1
y
…
app/Console/cake bake all
2
y
…
app/Console/cake bake all
3
y
…
app/Console/cake bake all
4
y
…

CakePHPの resourceにアクセスします

open http://localhost/~takuya/cakephp/users

(スクリーンショット 2012-12-21 22.15.04)

動いたよ!

sqlite簡単ですね。


理屈がわかれば簡単です。

Sqliteならフルパスで書けばいいんですね。
問題はMySQLSQLの書き方が異なることですね

cakephprailsみたいに migration できればいいのに

なんかぐぐっても出てこないんだけど、一応動くんでうsね