注: この記事は'14年6月に作成したものです。
AppEngineでCakePHPを動かすためのメモ。
App.YAMLとか、ログの保存先とかの修正(設定)が必須。
用意しておくもの
-
GoogleAppEngineの
Project ID
例: spring-line-534
Google Cloud Strage を用いるならば、
bucket
の名前Cloud SQL に接続するならば、"承認済みの App Engine アプリケーション"に、接続するAppEngineのプロジェクトIDを登録
参考サイト一覧
app.yaml の修正
app.yaml など、諸々の初期ファイルは、GoogleAppEngineLauncher
から生成しておきます。便利。
application: Google App Engineのプロジェクト ID
version: 1
runtime: php
api_version: 1
handlers:
- url: /css
static_dir: app/webroot/css
- url: /js
static_dir: app/webroot/img
- url: /img
static_dir: app/webroot/img
# Debug Kitを用いるならば >>>
- url: /debug_kit/css
static_dir: app/Plugin/DebugKit/webroot/css
- url: /debug_kit/js
static_dir: app/Plugin/DebugKit/webroot/js
- url: /debug_kit/img
static_dir: app/Plugin/DebugKit/webroot/img
# <<<
- url: /.*
script: app/webroot/index.php
DebugKitの導入についてはこちら で、綺麗にまとめられています。
PHP.iniの設定
php.ini
ファイルを app.yaml
と同階層に配置し編集。
設定/編集できる項目は Googleのリファレンス に記述されています。
google_app_engine.enable_functions = "php_sapi_name, php_uname, gc_enabled, getmypid, getmyuid, getmygid"
google_app_engine.allow_include_gs_buckets = Cloud Strage を用いるならば、作成して使用する `buckets` の名前を指定
date.timezone = Asia/Tokyo #=> `strtotime`とかで必須
post_max_size = 32M
upload_max_filesize = 32M
#=> CloudStrage などにFileをアップロードしたりするのに必須
Config/core.php ファイルの編集
こちらの記事を参考に、
$_SERVER
変数で、debug
値を設定します。
ついでに、Cacheエンジンを、
ローカルの開発環境ならFileキャッシュ、
本番環境ならばApcを使うように設定。
ローカルでもApc導入しているのならば、
$engine = "Apc";
のままで。
$engine;
if(isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false){
// Production
Configure::write('debug', 0);
$engine = 'Apc';
}else{
// Develop
Configure::write('debug', 2);
$engine = 'File';
}
Config/database.php の設定
ローカル環境で開発する際は、ローカルのMySQLへ、
本番環境はGoogle Cloud Sqlに接続します。
class DATABASE_CONFIG {
// デフォルトの設定を空に。
public $default = null;
// CloudSQL(本番環境)の設定
public $cloud_sql = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'unix_socket' => '/cloudsql/ CloudSQLで確認できるインスタンスID',
'login' => USERNAME,
'password' => PASSWORD,
'database' => DATABASE,
'encoding' => 'utf8',
);
// 開発環境(ローカル)の設定
public $localhost = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => USERNAME,
'password' => PASSWORD,
'database' => DATABASE_NAME,
'encoding' => 'utf8',
);
// Configure::read("debug")で`debug`値を読みに行き、
// 0 だったら本番環境(CloudSQL)
// それ以外は開発環境(ローカルホスト)を割り当てる
public function __construct(){
if(Configure::read("debug")==0){
// Production
$this->default = $this->cloud_sql;
} else {
// Dev
$this->default = $this->localhost;
}
}
}
Config/bootstrap.php の更新
database.php と同じく、
debug
値からApcとFileを選択。
if(Configure::read("debug")==0){
//production
Cache::config('default', array('engine' => 'Apc'));
} else {
// dev
Cache::config('default', array('engine' => 'File'));
}
あと、ここでログのとりかたも、修正しときます。
開発環境はFile
、本番環境(AppEngine)はSyslogLog
になるように。
if(Configure::read("debug")==0){
$engine = "SyslogLog";
} else {
$engine = "File";
}
CakeLog::config('debug', array(
'engine' => $engine,
'types' => array('notice', 'info', 'debug'),
'file' => 'debug',
));
CakeLog::config('error', array(
'engine' => $engine,
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
'file' => 'error',
));
app/webroot/index.php の修正
先に上げたこちらのサイトにもあるように、
app/webroot/index.php
にて2行を追加します。
$_SERVER['SCRIPT_FILENAME'] = __FILE__;
$_SERVER['PHP_SELF'] = 'webroot/index.php';
Deploy を行う
GoogleAppEngineLauncher
からDeployボタンを押して、deployします。
1クリックでデプロイできるので、便利。
しかし、このままでは404エラーが起こる。
Config/routes.php
PagesController.php
View/Pages/home.ctp
上記3点のファイルを修正しなければならない。
開発を行う
とりあえず404を避けるために、3点のファイルを修正する。
修正せずに新しいControllerを作って、そちらにルーティングさせるかは気分次第。
Config/routes.php を修正
Router::connect('/', array('controller' => 'pages', 'action' => 'home'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
とりあえず、 ルートをPagesControllerのhomeアクションにする。
PagesControllerの修正
public function home(){
}
動けば良いので、中身は空のfunctionを作成。
home.ctp の修正
<h2>TEST</h2>
<p>Hello World</p>
最初はいろいろと書かれていますが、
全部さくっと消して、テスト用の文面を記述。
これで動作が確認できる。