札幌で開催されたイベント「CMSMix Sapporo」にて、concrete5愛を語ってきました。

の続きです。最後の質問の回答に関するフォローアップといいましょうか。

 

WordPressのお引っ越し

2013年5月にWordBench千葉で「WordPressのお引っ越し」に関して勉強会をやったことがあります。

私はそのときにphpMyAdmin入門ってお話したんですが、同じCMSMix Sapporoで登壇なされた大曲さんはWordPressのデータ構造というお話をされていました。

だからあんなネタバレのような質問をしてしまったわけではありません(本当に偶然です)

簡単にいうと、WorPressのデータにはURLが入ってしまっていますので、そのままお引っ越ししてもダメで、その辺のお話は山本さんの記事やスライドが参考になるのではないかなと思います。

http://webcre-archive.com/2013/05/20/wordpress-db-url-replace2/

 

concrete5(5.7系)の場合は?

cocnrete5のDBにはURLをそのまま書いてあるわけではないので、基本的にDBの中身を変更することなくそのままお引っ越しはできます。(プリティーURLの設定を変えてあるときは.htaccessなどに気をつけなきゃいけないですが)

データベースに関する記述は /application/config/database.php に書かれています。

ローカル環境(MAMPでの設定例)

<?php
return array(
  'default-connection' => 'concrete',
  'connections' => array(
    'concrete' => array(
      'driver' => 'c5_pdo_mysql',
      'server' => 'localhost',
      'database' => 'nekomimi-school',
      'username' => 'root',
      'password' => 'root',
      'charset' => 'utf8',
    ),
  ),
);

(※MAMPをインストールしたばかりのMySQLで、IDもPASSもrootになっている場合)

 

本番サーバーの場合は、上記を書き換えてあげればいいですが、いちいちlocalhostをMySQLサーバー名に書き換えるのめんどくさいですよね。

で、concrete5では環境ごとにDB情報を書いたファイルを切り替える方法があります。

環境ごとに異なる設定ファイルを読み込む(concrete5-japan.org)

上記では/application/bootstrap/start.phpに環境ごとのホスト名を書いてくださいということです。
でもなんだかわかったようなわからないような感じなので、自分のを例に書いてみます。

 

ねこみみすくーるサイトを例にした場合

  • ローカル環境(愛媛で使ってるiMac)
  • ローカル環境(千葉などで持ち歩くMBA)
  • webサーバー

の3つの環境があります。

DB情報

先ほどのローカル環境の設定を/application/config/local.database.php というファイル名に変更します。
そして本番の設定を/application/config/database.phpとして保存します。

<?php
return array(
  'default-connection' => 'concrete',
  'connections' => array(
    'concrete' => array(
      'driver' => 'c5_pdo_mysql',
      'server' => '本番mysqlサーバー名',
      'database' => 'nekomimi-school',
      'username' => 'user',
      'password' => 'password',
      'charset' => 'utf8',
    ),
  ),
);

というふうになります。

すると/application/configディレクトリはこんなふうになります。

スクリーンショット 2016-03-02 19.15

環境切り替え設定

次に、/application/bootstrap/start.phpを使って切り替えさせてあげます。
最初はstart.phpはこのように書かれていると思います。

<?php
use ConcreteCoreApplicationApplication;
/**
 * ----------------------------------------------------------------------------
 * Instantiate concrete5
 * ----------------------------------------------------------------------------
 */
$app = new Application();
/**
 * ----------------------------------------------------------------------------
 * Detect the environment based on the hostname of the server
 * ----------------------------------------------------------------------------
 */
$app->detectEnvironment(
  array(
    'local' => array(
      'hostname'
    ),
    'production' => array(
      'live.site'
    )
  ));
return $app;

ここのhostnameを2台のそれぞれのマシンのhost名を記述してあげます。

ホスト名?

Macの場合ですが、ターミナルを開いてhostnameって打ってみてください。

スクリーンショット 2016-03-02 19.03

こんな風に出てくるので、それぞれのローカルマシンのホスト名を先ほどのstat.phpに記載します。

$app->detectEnvironment(
  array(
    'local' => array(
      'nekomimi-no-iMac.local',
      'Naomi-no-MacBook-Air.local'
    ),
  'production' => array(
    'live.site'
  )
 ));

これで2台のローカル環境と本番サーバーの切り替えができるようになりました。
みなさんのそれぞれの環境に合わせて設定してみてくださいね。