herokuのmemcachierをfuelPHPで使えるようにする
はじめに
heorkuでは、様々な機能がaddonという形で提供されています。
MySQLサーバーのaddonであるClearDBや、
MemcacheサーバーのaddonであるMemcachierなどがそうです。
これらは利用しているストレージのプランでお金がかかります。
といっても開発用の小規模なものは無料で借りられます。
今回はfuelPHPのcoreのcache部分のライブラリを拡張して、
memcachierを使えるようにします。
前提
herokuのtoolbeltやssh設定などは一通り終わってるものとします。
本編
herokuにmemcachierを入れる
アプリケーションが複数ある場合にはheorkuコマンドには --app [appID]を必ず付けてください。
$ heroku addons:add memcachier:dev
これで開発用のmemcachierサーバーを確保することができます。
$ heroku config ... MEMCACHIER_SERVERS => mcX.ec2.memcachier.com MEMCACHIER_USERNAME => bobslob MEMCACHIER_PASSWORD => l0nGr4ndoMstr1Ngo5strang3CHaR4cteRS ...
これでmemcachierサーバーと接続するために必要な情報が得られます。
見たまんまですが、サーバー、ユーザー名、パスワードです。
memcacheを使うときとmemcachierを使うときの違い
memcachierを使うのはmemcacheを使うのとほとんど同じなのですが、
memcachierは自分のサーバー内に有るわけではなく、
外部でサービスとして提供されています。
この外部のサービスに接続するために、
coreのCache_Storage_Memcachedでmemcachedのインスタンスを生成する際に、
認証情報を付加する必要があります。
この認証情報の付加ができるCache_Storage_Memcachierクラスを自作してみます。
Cache_Storage_Memcachierクラスを作る
といってもcoreのCache_Storage_Memcachedを数行書き換えただけです。
fuelphp Cache_Storage_Memcachier to use memcachier on heroku
<?php static::$memcached->setSaslAuthData( getenv("MEMCACHIER_USERNAME"), getenv("MEMCACHIER_PASSWORD") );
の部分で認証情報を付加しています。
getenv("MEMCACHIER_USERNAME")にさっきのユーザー名、
getenv("MEMCACHIER_PASSWORD")にさっきのパスワードが入ってきます。
Cache_Storage_Memcachierクラスをfuelに読み込ませる。
ところでこのファイルをどこに置くかという話ですが...
正直どこでも良いようです。
というのはbootstrap.phpに正しく記述すればどこでも動くからです。
このファイルを
app/classes/cache/memcachier.php
という位置に作ったとしたら、
app/bootstrap.phpに
Autoloader::add_classes(array(
'Cache_Storage_Memcachier' => APPPATH.'classes/cache/memcachier.php'
));
というふうに書いてください。
これでCache_Storage_Memcachierクラスがapp/classes/cache/memcachier.phpにあることを
fuelphpに教えることができます。
設定ファイルを書く
<?php return array( 'driver' => 'memcachier', 'memcachier' => array( 'cache_id' => 'fuel', 'servers' => array( 'default' => array('host' => 'mcX.ec2.memcachier.com', 'port' => 11211, 'weight' => 100) ), ), );
という感じで設定します。
これでdriver部分をmemcachedからmemcachierに切り替えるだけで、
簡単に移行できます。