「cake」カテゴリーアーカイブ

cake2を使って動かしているシステムを別サーバに移動させた時の手順


cake2で作ったシステムを別サーバに移動するのは少々面倒

さくらインターネットのプレミアムプランでcake2を使って動かしていたサービスをスタンダードプランに移動させた時のメモ書きです。

PHPのフレームワークは、

cake/kohana/Zend/Symfony/Laravel/CodeIgniter…etc

といった具合に色々な種類があります。

世界中の人が次々開発しています。

私は、いつも同じフレームワークばかり使っているわけではありません。

トレンドに合わせて乗り換えたりもしています。

FWは、ずっと使っていないと使い勝手とかどうしても忘れてしまうんですよね。

そこで一度習得したコツとかを備忘録としてメモっておきます。

この記事は、私が忘れた時に見返してすぐ分かる様にメモっています。

参考にされる方は、その点をご理解ください。

 

久しぶりにcakeを触ったという事もありますが、幾つかはまりポイントがあったのでメモっておきます。

①プレミアムプラン

②スタンダードプラン

①で動いているシステムを②に移動させたのですが、①と②とでcakeの設定が異なる状態でした。

最初は、①のスクリプト一式を②にコピーすれば動くだろう、と軽く考えていたのですが、cakeの設定が異なっている為になかなかスムーズに動きませんでした。

そこでcake自体は②の環境を使う事にしました。

具体的には②でcakeが動いているプロジェクトをコピーします。そこに①で動かしていたスクリプトを順番に貼り付けていきます。

つまり、cakeが動く状態にしてからプログラムを少しずつ移行していく流れです。

基本的な流れは以上ですが、実際に作業をしていく中ではまったポイントをメモっておきます。

/home/{user_name}/apps/{application_name}/Config/core.php

core.phpの中にセキュリティソルトを設定する箇所があります。

この部分を適宜修正する必要があります。修正しないとAuth認証(ログイン認証システム)で失敗してしまいます。

Security.salt

/**
* A random string used in security hashing methods.
*/

Configure::write(‘Security.salt’, ‘XXX’);

Security.cipherSeed

/**
* A random numeric string (digits only) used to encrypt/decrypt strings.
*/

Configure::write(‘Security.cipherSeed’, ‘XXX’);

「Security.salt」と「Security.cipherSeed」は、CakePHP がパスワードや Cookieとして利用する情報をハッシュ化したり暗号化する際に使用されています。

/home/{user_name}/apps/{application_name}/View

cake2で必ず使うViewファイルの上書きが必要です。

また、Cake2の場合、

View/{コントローラー名}/{ファンクション名}

というルールになっています。

慣れるまで違和感があります。

また、Viewファイルの拡張子は、ctpです。

ControlerでのAjax処理でパスのべた書き

PHPのコード内にサーバ固有情報(ユーザ名)をべた書きしており、Ajax処理で失敗していました。

サーバ固有の情報はコーディング時には面倒でもconfigファイルなどに外で定義しておいた方がいいと実感しました。

public function download()
{
if( $this->request->is( ‘ajax’ ) )

$basic_path = “/home/{user_name}/xxx/xxx”;

{user_name}部分に利用中のサーバのユーザ名をべた書きしてい為に失敗していました。

apps/{application_name}/Config/const.php

定数定義ファイルに記述した定数を読み取る

まず、

Config/bootstrap.phpの中に読み取り対象の定義ファイルを指定します。

この時に引数にはphpは拡張子として付けません。

Configure::load(“const”);

実際に定数を定義していくファイルは

Config/const.phpです。

const.phpの中での定数の記述例

</php

$config[“app_info”] = array(
“happy_date” => “2017/03/03 12:15”,     // コメント
);

?>

最後の「,」は、あっても無くてもPHPの文法上はエラーになりません。

コントローラーの中で定義済の定数の呼び出し

$my_happy_day  = Configure::read(“app_info.happy_date“);

と記述します。すると$my_happy_dayには、 ”2017/03/03 12:15″が格納されます。

シェルが動かない場合

移動元サーバでcakeシェルの実行が出来ていたのに、新サーバに同じプログラムを全部移動して実行しても動きませんでした。

まず、やった事。

php -v

とTeraTermからサーバに接続して発行します。

このコマンドを発行した時に

PHP 5.2.17(cli)(built: Nov 10 2016 10:45:11)

Copyright(C) 1997-2010 The PHP Group

Zend Engine v2.2.0 Copyright(c) 1998-2010 Zend Technologiesと表示されれば、TeraTerm上からPHPコマンドが認識されている事になります。

phpのパス通しには問題ありません。

 

今回シェル実行がうまく行かなかった理由ですが、新サーバーでは、cake.phpが複数の階層にあり、誤ったパスのcake.phpを指定していた事が原因でした。

i) 正しいcake.phpのパス

/home/{user_name}/cake/Cake/Console/cake.php

j) 誤ったcake.phpのパス

/home/{user_name}/cake/Console/cake.php

最初  j) を指定してシェルを実行しようとしていた為にコマンド事項をしてもTeraTerm上にエラーも何も表示されませんでした。

その後、正しい i) を指定したところ正常にシェルが実行されました。

私は、cakeの環境構築時にcakeのパスとかいろいろとカスタマイズしていました。

そのせいでcake.phpが複数パスに存在していたのかもしれません。

いずれにせよ正しく指定すればシェルは動きます。

cakeの機能を使ったメールを送信する設定

Config/email.php

の中にメール送信情報を記述します。

Gmailを使ってメールを送信する場合の基本設定の例はこちらです。

//Gmailを利用してcakeでメールを送る設定
public $gmail = array(
‘host’ => ‘ssl://smtp.gmail.com’,
‘port’ => 465,
‘username’ =>{user_name},
‘password’ =>{pass_word}
);

 


cakePHPの基本設定


cakePHPの特にバージョン2以降について、必ず設定が必要な項目等に絞ってメモ書きをしています。本サイトの記事をご覧になり試した結果引き起こされた不具合には一切責任は負いませんので、全てご自身の責任においてお試しください。ノウハウツリー管理人の完全なるメモサイトである事を十分ご理解ください。

 

apps/Config/routes.php

最初にサイトにアクセスが来た場合にどのコントローラ、ファンクションに誘導させるかの設定が出来ます。

29行目あたりに

Router::connect(‘/’, array(‘controller’ => ‘Takepons’, ‘action’ => ‘index’));

この様に記述すると http://test.com/ でアクセスされると最初に

apps/Controller/TakePonsControllerの中のindexファンクションが呼び出されるという設定になります。

 

apps/Config/database.php

 

アプリケーションが使用するデータベースの設定を行います。使用するレンタルサーバのDB設定に合わせましょう。

public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘XXX’,
‘login’ => ‘XXX’,
‘password’ => ‘XXX’,
‘database’ => ‘test-db’,
‘prefix’ => ”,
‘encoding’ => ‘utf8’,
);

 

apps/Config/bootstrap.php

bootstrap.phpの28行目あたりに

Configure::load(“hogehoge”);

と記述すると、apps/Config/hogehoge.php の中で定義した定数を読み込む事が出来ます。

 

cakePHPのバージョンを確認する。

Configure::version();

 

デバッグ情報の出力の有無を設定する。

本番環境ではセキュリティ維持の為にもデバッグ情報は一切出さない様に 0 を設定しましょう。

Config/core.php

エラーメッセージを一切出さない。
Configure::write(‘debug’, 0);

エラーメッセージを表示するがSQL文は出力しない。
Configure::write(‘debug’, 1);

フルでデバッグメッセージを表示してSQL文も出力する。
Configure::write(‘debug’, 2);

利用中のcakeのバージョンを表示する。
echo Configure::version();