儲かる気がしないスマホアプリ開発日誌

脱サラと儲けるのが目的でスマホアプリを一人で寂しく開発しております。 主に開発ネタと愚痴を中心に日々の日記を書きます。

カテゴリ: CakePHP1

現在運用しているスマホアプリはWebView(WEBブラウザ)を採用しています。
先日サーバーリプレースを行った際のメンテナンス中の告知の仕組みをサーバー側に実装しました。

採用したのは Maintenance plugin for CakePHP です。
サーバー側のシステムは今となっては懐かしいCakePHP1.3です。リリースが2011年なので、まあ今となっては技術負債的な感じですね。

Maintenance plugin for CakePHP はCakePHPにアクセスしたコントローラーへのリクエストに対して、指定のメンテナンス画面にリダイレクトさせると言うだけのプラグインです。

ヘルプに実装方法が書かれていますが、ちょっと分かり辛い点もあるのでここでまとめておきます。


1)githubからプラグインをダウンロードして設置する

ダウンロードしたディレクトリを下のようにCakePHP1.3のプラグインディレクトリにコピーします。
app/plugins/maintenance
ディレクトリ名は「maintenance」です。


2)bootstrapへの仕込み

config/bootstrap.php に許可設定を追記します。trueでメンテナンス画面を表示させます。
Configure::write('Maintenance.enable', true);

3)AppControllerへの仕込み

controller/app_controller.php にメンテナンスページの挙動を追記します。
  var $components = array(
   'Maintenance.Maintenance' => array(
    'maintenanceUrl' => array(
 'controller' => 'pages', 
 'action' => 'maintenance'), 
//  'allowedIp' => array('xxx.xxx.xxx.xxx'), // allowed IP address when maintanance status 
//   'allowedAction' => array('pages' => array('*')) 
//    'users' => array('*')) // allowed action when maintanance status 

 ); 
ここの記述ちょっと分かり辛かったです。
表示するメンテナンスページは新たにコントローラーとアクションを準備しなければなりません。
    'maintenanceUrl' => array(
 'controller' => 'pages', 
 'action' => 'maintenance'), 
ここでは、controller/pages_controller.phpのmaintenanceアクションを指定しています。
class PagesController extends AppController {
function maintenance() {
$this->layout = "pages";
}
}

4)テンプレートへの仕込み


そしてテンプレートも用意します。
views/pages/maintenance.ctp
<div class="note">
ご不便をおかけして申し訳ありません。<br />
只今メンテナンス中です。<br />
</div>

次はコメントアウトしていますが、例外設定です。
例えばメンテナンス中に動作確認を行うためにメンテナンスページに行かないようしたくなると思いますが、これを指定します。自分IPを指定してここからアクセスはメンテナンスページに飛ばしません。
//  'allowedIp' => array('xxx.xxx.xxx.xxx'), // allowed IP address when maintanance status 
次は例外のコントローラーとアクションです。
メンテナンスページに飛ばしたくないコントローラーとアクションがあればここに記載します。
例えばAPI的なコントローラーがあって、動きを止めたくないものなどでしょうか。
//   'allowedAction' => array('pages' => array('*')) 
//    'users' => array('*')) // allowed action when maintanance status 

以上です。

これって2010年くらいに書くべき記事だよね。。今2015年っすよ。。
役に立つ人はいないだろう。きっと。

このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr Clip to Evernote

ネタがあるのでシリーズ化。

さくらからのリプレース先は、ServersMan@VPS です。
メモリ1GB、HDD50GBで467円!安い!貧乏スタートアップの味方!
値段だけで言うとさくらのVPSの同プランと比べて半額なのです。

アプリに人気出てサーバーの負荷が増えたらもちろんもっといいプランにするよ!
夢はAWSでクラスタ組みたいお。。

で、サクッとLAMP環境を作ってAPのプログラムを動かしてみたら、、
エラーが山盛り出て驚きを隠せない。
 
Strict Standards: Non-static method App::core() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 429

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Warning: Illegal string offset 'file' in /pub/www/html/cakephp/cake/libs/debugger.php on line 622

Warning: Illegal string offset 'line' in /pub/www/html/cakephp/cake/libs/debugger.php on line 622

Strict Standards: Non-static method App::core() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 429

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 398

Strict Standards: Non-static method Configure::read() should not be called statically in /pub/www/html/cakephp/cake/basics.php on line 213

Strict Standards: Non-static method Configure::getInstance() should not be called statically in /pub/www/html/cakephp/cake/libs/configure.php on line 155

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 657

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 657

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 668

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 668

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 673
Warning (2): strtotime() [function.strtotime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. [CORE/cake/libs/cache.php, line 597]
Strict Standards: Non-static method Configure::read() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 308

Strict Standards: Non-static method Configure::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/configure.php on line 155

Strict Standards: Non-static method CakeLog::write() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 311

Strict Standards: Non-static method String::insert() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/debugger.php on line 311

Strict Standards: Non-static method CakeLog::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/cake_log.php on line 230

Strict Standards: Non-static method App::import() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/cake_log.php on line 180

Strict Standards: Non-static method App::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/configure.php on line 909

Strict Standards: Non-static method Cache::read() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/configure.php on line 982

Strict Standards: Non-static method Cache::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/cache.php on line 345

Strict Standards: Non-static method Configure::read() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/cache.php on line 520

Strict Standards: Non-static method Configure::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/configure.php on line 155

Strict Standards: Non-static method Inflector::underscore() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/cache.php on line 699

Strict Standards: Non-static method Inflector::getInstance() should not be called statically, assuming $this from incompatible context in /pub/www/html/cakephp/cake/libs/inflector.php on line 512

Notice: Trying to get property of non-object in /pub/www/html/cakephp/cake/libs/cache/file.php on line 248

Fatal error: Call to a member function cd() on a non-object in /pub/www/html/cakephp/cake/libs/cache/file.php on line 248;
さくらVPSの旧環境は、こんな感じ。
CentOS5
php5.4.36
mysql5.5.4-m3
apache2.2.27

 DTIの新環境は、こんな感じ。
CentOS6
php5.5.28
mysql5.6.26
apache2.2.31
 
この差分にエラーの謎の鍵があるはず。恐らく原因はPHPか。
しかしよく考えると俺っちの開発環境であるMBPR13US(注:Mac Book Pro 13インチ Retuna USキーボードモデル) は、PHPは5.5.26。

・・開発環境ではちゃんと動いている。もしかして過去に解決したっけ? 
core.phpの差分を見てみる。
 
diff -u core.php.production core.php.develop 
---
-	//date_default_timezone_set('UTC');
+	date_default_timezone_set('UTC');

ちゃんと解決してるじゃん!過去の俺っち!やるじゃん。
この通り修正したらちゃんと動いたよー!

あ、ちなみにAPはCakePHPの1.3系と言う技術負債的な環境ですw

時間できたらLaravel5にする予定です!

このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr Clip to Evernote

↑このページのトップヘ