人生の恥は書き捨て

プログラムとかいろいろ

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_Memcachedmemcachedインスタンスを生成する際に、
認証情報を付加する必要があります。

この認証情報の付加ができる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に切り替えるだけで、
簡単に移行できます。

おわりに

以上で、fuelphpからherokuのmemcachierが使えるようになりました。