Motomichi Works Blog

その日学習したことについて書いている日記です。誰かの役に立ったらそれはそれで嬉しいです。

さくらvpsとcakephp2.6.7で開発日記 その0017 本番とステージングと開発で接続するデータベースやデバッグモードを動的に変更する

参考にさせて頂いたページ

CakePHPでproduction,staging,developmentを自動で切り替える

CakePHPのデータベースを開発環境と本番環境で切り分ける方法 » INSPIRE TECH

ServerNameを取得する方法

cakephpでは、以下のように書くと取得できる。

env('SERVER_NAME')

app/Config/const.phpを作成する

CakePHPでproduction,staging,developmentを自動で切り替える

にならって進めていきます。

例として以下の通り。

<?php
// 環境判定用の定数
define('PRODUCTION_SERVER_NAME', 'production.hoge.com');
define('STAGING_SERVER_NAME', 'staging.hoge.com');
define('DEVELOPMENT_SERVER_NAME', 'development.hoge.com');

参考ページに倣ってデータベース接続設定をしてみる

  • database.phpの上部でrequire_onceして、const.phpを読み込む
  • $default以外にも任意の変数名で、例えば$productionとか$stagingとかでデータベースの接続設定を記述する
  • database.phpの下部にif文を記述して、条件次第で$this->defaultの値を上書きする

database.phpの記述内容は例として以下の通り。

<?php

//定数を読み込み
require_once(APP.'Config'.DS.'const.php');

//接続するDBを動的に設定
class DATABASE_CONFIG {

    //$default
    public $default = array(
        //接続の為の設定はご自身の環境に置き換えてください
        );

    //本番用DB接続設定
    public $production = array(
        //接続の為の設定はご自身の環境に置き換えてください
    );

    //ステージング用DB接続設定
    public $staging = array(
        //接続の為の設定はご自身の環境に置き換えてください
    );

    //開発用DB接続設定
    public $development = array(
        //接続の為の設定はご自身の環境に置き換えてください
    );

    public function __construct() {
        if (env('SERVER_NAME') == PRODUCTION_SERVER_NAME) {
            $this->default = $this->production;
        } elseif(env('SERVER_NAME') == STAGING_SERVER_NAME) {
            $this->default = $this->staging;
        } elseif(env('SERVER_NAME') == DEVELOPMENT_SERVER_NAME) {
            $this->default = $this->development;
        } 
    }
}

core.phpデバッグモードも設定してみる

まず、core.phpの上部で以下のような感じにrequire_onceする。

require_once(APP.'Config'.DS.'const.php');

検索すると、以下のような感じになっているところがあるので、if文で0などに切り替える。

Configure::write('debug', 2);

例として以下の通り。

if (env('SERVER_NAME') == PRODUCTION_SERVER_NAME) {
    //本番環境は0
    Configure::write('debug', 0);
} else {
    //本番環境以外は2
    Configure::write('debug', 2);
}