タグ

ブックマーク / www.1x1.jp (14)

  • CakePHP2 アプリケーションを Heroku で動かす設定

    CakePHP2 アプリケーションを Heroku 上で動かす設定についてです。 以前のエントリにも書きましたが、Heroku で Web アプリケーションを動かす際に重要なのは、Web サーバ自体(Heroku では、Dyno)に、アプリケーションの状態(データ、セッション情報、ログ等)を保持させないということです。 Heroku の Dyno は、デプロイの際や、定常的な再起動により、破棄されるため、記録されたファイルは消えてしまいます。よって、こうしたデータファイルは、アドオンなど外部に記録する必要があります。 Heroku では、アドオンを活用するのがポイントですので、ここでは、主に CakePHP アプリケーションからこうしたアドオンと連携する方法を見ていきます。 Environments Library as a plugin まず、開発環境と Heroku 環境で設定値を切り

    k1LoW
    k1LoW 2014/12/03
    タイムスタンプを更新してほしかった情報!
  • CakePHP routes.phpの確認はユニットテストで

    routes.phpを仕様に合わせて設定しておきます。 <?php // Router::connect('/:user_id/edit', array('controller' => 'user', 'action' => 'edit')); Router::connect('/', array('controller' => 'top', 'action' => 'index')); Router::connect('/:user_id/*', array('controller' => 'user', 'action' => 'index')); // Nothing Router::connect('*', array('controller' => 'nothing')); ?> 最後はシステムが取るべきURL以外ならNot Foundを出すように設定しています。これにより想定外

  • nginx+php-fpmをyumでインストールして、WordPress/CakePHPを動かす設定

    Home > PHP | Web+DB > nginx+php-fpmをyumでインストールして、WordPress/CakePHPを動かす設定 www.1×1.jpの環境をApache+mod_phpな環境から、nginx+php-fpmな環境へ移行しました。 さくらVPSのCentOS5.5環境にnginx+php-fpmをyumでインストールして、CakePHPWordPressを動かす設定を行いました。 このエントリでは導入ということで、インストールから、とりあえず動作するところまでをご紹介します。 0. 構成 nginx+php-fpm環境にCakePHPWordPressをインストールします。 それぞれ以下のURLでアクセスできるようにします。 http://www.1×1.jp/ -> CakePHP http://www.1×1.jp/blog/ -> WordPres

  • rsyncの--deleteでファイルが削除されない

    rsyncで以前困ったこと。 –deleteを付けて同期しているのに、同期元で削除したファイルがなぜか同期先で消えない現象が発生。 結局理由は、同期元のパスに*(アスタリスク)を付けていたのが原因だった。 ディレクトリ構成は↓な感じ。 $ find ./ ./src/ ./src/a ./des ./des/a ./des/b bはdes/にはあるが、src/には無いので–delete付けると、消えるはず。 $ rsync -avz –delete src/* des/ $ find ./ ./src/ ./src/a ./des ./des/a ./des/b <--- 消えてない。。。 [/code] アスタリスク無しで実行すればok。 $ rsync -avz –delete src/ des/ $ find ./ ./src/ ./src/a ./des ./des/a <---

    k1LoW
    k1LoW 2011/04/07
  • CakePHP Modelとの付き合い方(CakePHP Advent Calendar 2010 3日目)

    CakePHPのModelに悩む人が多いようなので、自分なりの付き合い方(考え方)をご紹介します。 CakePHP Advent Calendar 2010の3日目です。 前日の k1LoW さんのエントリ、参考になりますね。GETのフォームをdata[]でやるとURLがすんごいことになるので、ウチでは別途対応できるライブラリを作ったりしてます。 さて、3日目の今日は書きたいネタは幾つかあったのですが、「君の当たり前に僕らは感嘆させられるんだ」の精神に従って、自分なりのModelの使い方、考え方を書いてみます。 1. 適正なインターフェイスを用意して処理をカプセル化 まず基的な考え方。 Model(に限らずですが)では、処理単位でインターフェイス(メソッド)を用意して、実装はカプセル化しておきます。 こうすることによって、Modelを利用する側(Controllerや他のModel等)は

    k1LoW
    k1LoW 2010/12/03
    すごい。期待通りの実"戦"的内容。
  • Lithiumのフィルタシステム

    次世代CakePHPとも言うべきフレームワークLithiumのフィルタシステムを見てみました。 Lithiumは対象がPHP5.3以上ということで、5.3ならではの機能を活用したアーキテクチャになっています。中でも特徴的なのがフィルタシステムです。 全体のアーキテクチャとしては、CakePHPの流れを汲んで標準的なMVCフレームワークになっています。ただそれを実現する手段としてフィルタシステムを多用しています。これまでのフレームワークとは異なる点があり、いざフレームワークの動きを掴もうとすると戸惑います。 そこでLithiumのフィルタシステムをざっくりと見てみましょう。 サンプルソース サンプルとして、SampleControllerとそのビューテンプレートを用意します。 フィルタの動きを見るだけなので、indexアクションでは、ログに__METHOD__を記録するだけです。 [app/

  • CakePHP 目で見るフックメソッド

    第2回CakePHP関西勉強会でやったデモをこちらでも。 CakePHPには色々なフックメソッドがあるのですが、それらがどのタイミングで呼ばれるかを一覧できるようにデモを行いました。懇親会やアンケートでも良かったよ、と意見を頂いたので、簡単に画面のキャプチャを並べます。 1. Controllerのフックメソッド Controllerのフックメソッドを並べています。index()はアクションメソッドなので、ここで表示されているフックメソッドは3つです。 ソース <?php class DemoController extends AppController { public $uses = array(); public function index() { } } ?> フックメソッドの並び 2. Componentのフックメソッド Controllerの$componentsを設定して

  • CakePHP PostgreSQLではgetInsertID()に注意

    @deprecated この情報はCakePHP1.2RC1までのものです。2008/06/26現在のリポジトリではチケットが反映され修正が完了しています。 CakePHP+PostgreSQLでModel#getInsertID()を使う場合、別セッションのシーケンス値が取得される問題があります。 問題点 ユーザ情報とその付加情報や、注文情報と明細情報などINSERT後にそのレコードに関連する情報としてid値を活用する場合、来とは異なるレコードに結びつく可能性があります。 ex) 別の注文情報に明細が登録される等 ただ、これはほぼ同時にINSERT文が発行された際に起こる現象ですので、それほど登録処理が行われないサイトではあまり遭遇するものではありません。(ですので、これまであまり表面化しなかったかと。) CakePHP1.2RC1/1.2-beta/1.1.19でこの問題があります。

  • CakePHP 1.2beta対応―CakeInfo-0.1.2リリース | Shin x blog

    CakePHPアプリケーションの内容をphpinfo()風に見せるCakeInfoをCakePHP1.2-betaに対応しました。 OpenFLPを表示するとこんな感じです。 主な変更点は以下です。 CakePHP1.2-beta対応 Controllerにaction_methodを追加 今回追加したControllerのaction_methodでは外部からアクションメソッドとして呼べるメソッドを表示しています。これを見ると公開するつもりの無いメソッドが公開されていないかを確認できるので、自作のCakeアプリにて試してみてください。 設置 設置方法は簡単です。 まず[http://www.1×1.jp/blog/download/cakeinfo-0.1.2.zip]からzipファイルをダウンロードします。 あとはダウンロードしたzipファイルを展開し、[cakeinfo.php][l

  • CakePHP パフォーマンスが出ない時は、例えばフレームワークを避ける

    フレームワークを使ってパフォーマンスに問題があったため、Plain PHPで書き直したという話です。 先日受信したメールの内容を.forward経由でDBを保存するという処理を実装しました。まあ良くある処理なのですが、このシステムではWeb側をCakePHPで実装していたので、メール処理もCakePHPのCLI機能(cakeコマンド)を利用しました。 実際に動作してみて数件程度では問題無かったのですが、負荷試験として短時間に数百件、数千件のメールを受信させると、LAが80程度まで跳ね上がりました。処理自体を見直したり、不要なSQLをカットしたりしたのですが、それほど大きな効果はありませんでした。 これはフレームワークの起動に時間がかかっていると判断し、CakePHPを使わずベタなPHPスクリプトだけで実装してテストすると、同じ負荷をかけてもLAが3-4程度まで落ちました。 timeコマンド

  • CakePHP Model#save()のSELECT文を抑制する

    Model#save()でUPDATE文が発行される際は、まず該当ID(primary key)がDBに存在するかを確認するSELECT文が発行されて、存在すればUPDATE文が発行されます。 1レコードだけを更新するなら特に気にする必要は無いのですが、大量のレコードを逐次UPDATEする際はこのSELECT文を抑制したくなります。 そこでこのSELECT文を抑制する方法を調べてみました。 1. Model#$__exitstsにtrueを入れる ちょっと強引な方法ですが、save()を実行する直前でModel#$__exitstsにtrueを入れると、SELECT文が発行されません。 Model#$__exitstsはsave()実行後、nullにリセットされるので元の値を戻す必要はありません。 // FooがModel $this->Foo->__exists = true; $thi

  • CakePHP データベースを使わないアプリケーション

    CakePHPはデータベースを使用することが前提となっているので、フレームワークがデータベースへの接続を自動的に行います。ただマッシュアップ系のサービスなどデータベースを全く使用しない場合はこの機能を無効にしたくなります。 そこでCakePHPアプリケーション全体でデータベースを使わない方法です。 ちなみにこの方法では[app/config/database.php]を作成する必要もありません。 1. モデルを使わない コントローラの$usesにnull or array()を設定することによりモデルを使用しないようにできます。データベースへの接続はモデルを介して行うのでモデルを使わなければ接続処理は行われません。(セッションやキャッシュをDBに保存する場合は別ですが) <?php class HogeController extends AppController { var $uses

  • CakePHP 1.2でPostgreSQLを使うとエラーが出る

    あ,そうだ。PostgreSQL だともうなんだか色々エラーが出てるので諦めちゃいました……。 1.2を試してみました – まゆの日記 同じエラーかどうか分かりませんが、同じような現象があったので。 CakePHP1.2.0.5875 pre-betaでPostgreSQLに接続しようとすると以下のようなエラーが出ました。 Warning (2): pg_query() [function.pg-query]: Query failed: ERROR: syntax error at end of input at character 20 [CORE\cake\libs\model\datasources\dbo\dbo_postgres.php, line 123] 原因は[app/config/database.php]に追加された「schema」パラメータです。このパラメータを使う

  • CakePHPでCSRF対策

    CakePHPでCSRF対策を行う方法です。 フレームワークに含まれているSecurityコンポーネントを使います。 Security#requestAuth()にアクションを記述しておくと、アクション実行前に正規リクエストかどうかをチェックします。チェックの方法はCSRF対策で一般的なワンタイムトークン方式です。 まずController#beforeFilter()にてチェックを行うアクションを指定します。 [app/controller/test_controller.php] < ?php class TestController extends AppController { var $name = 'Test'; var $components = array('Security'); function beforeFilter() { $this->Security->req

  • 1