LoginSignup
12
12

More than 5 years have passed since last update.

GoogleAppEngineでCakePHP2.xを動かす

Last updated at Posted at 2015-06-20

注: この記事は'14年6月に作成したものです。

AppEngineでCakePHPを動かすためのメモ。

App.YAMLとか、ログの保存先とかの修正(設定)が必須。


用意しておくもの

  • GoogleAppEngineのProject ID

    例: spring-line-534

  • Google Cloud Strage を用いるならば、bucket の名前

  • Cloud SQL に接続するならば、"承認済みの App Engine アプリケーション"に、接続するAppEngineのプロジェクトIDを登録


参考サイト一覧

app.yamlなど基本的な設定

AppEngine上でのCakePHPの運用


app.yaml の修正

app.yaml など、諸々の初期ファイルは、GoogleAppEngineLauncherから生成しておきます。便利。

app.yaml
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のリファレンス に記述されています。

php.ini
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";のままで。

Config/core.php
$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に接続します。

Config/database.php
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を選択。

Config/bootstrap.php
if(Configure::read("debug")==0){
    //production
    Cache::config('default', array('engine' => 'Apc'));
} else {
    // dev
    Cache::config('default', array('engine' => 'File'));
}

あと、ここでログのとりかたも、修正しときます。

開発環境はFile、本番環境(AppEngine)はSyslogLogになるように。

Config/bootstrap.php
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行を追加します。

app/webroot/index.php
$_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 を修正

Config/routes.php
Router::connect('/', array('controller' => 'pages', 'action' => 'home'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';

とりあえず、 ルートをPagesControllerのhomeアクションにする。

PagesControllerの修正

PagesController.php
public function home(){

}

動けば良いので、中身は空のfunctionを作成。

home.ctp の修正

home.ctp
<h2>TEST</h2>
<p>Hello World</p>

最初はいろいろと書かれていますが、
全部さくっと消して、テスト用の文面を記述。


これで動作が確認できる。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12