[Heroku][Symfony2]セッションをMemcachedに格納してみる

投稿者: | 2014/08/03

かなり久しぶりの更新です。
前回では、HerokuでSymfony2を動かすようにしてみましたが、セッションをMemcachedに格納するところがどうしてもできずにいました。

しかし、PHP session handling on Herokuを見つけまして、試したらちゃんと動きました。
結局は、設定ミスや勘違いが原因だったのですが、同じようなことにハマっている人もいるかもしれないので方法を紹介します。

今回の目標

  • HerokuのMemcachierアドオンを入れてHerokuからMemcachedを動かせるようにする
  • Symfony2のセッション管理にMemcachedを使うようにする

環境

  • Mac OS X 10.9.2
  • Git 1.8.5.2
  • Symfony2 (2.3.16)
  • PHP 5.5.14

前提条件

  • Herokuのアカウントを登録、アドオン追加のため、クレジットカードも入力済みとする
  • Git, Heroku Toolbelt, Composer はインストール済みとする
  • PHPのMemcached(memcacheではない)モジュールをインストールする
    • $ php -mmemcachedと表示されていれば大丈夫です

Memcachierアドオンをインストール

HerokuでMemcachedを使うアドオンとして、Memcachierを使います。

無料枠もありますが、使うにはクレジットカードの登録が必要です。

Memcachierアドオンをインストールします。

設定を確認してみます。

Memcachedを使うための設定が環境変数に格納されています。

composer.json にMemcachedを追加する

composer.jsonMemcachedを追加して、composer updateします。

PHPのMemcachedモジュール(memcacheではない)をインストールしていないと、以下のようなエラーがでます。

フロントコントローラ(app_xxx.php)に、ini_set()を追記する

先ほどのMemcachedの設定をPHPの設定に組み込むために、ini_set()を使います1
今回は、web/app_heroku.phpに以下のように追記します。

Memcachedの設定値はgetenv()で環境変数から取得するようにしています。

Symfony2でセッションの保存先をMemcachedに変更する

先ほどのweb/app_heroku.phpでセッションの保存先をMemcachedに変更したので、Symfony2の設定ファイルでは以下のように修正します。

handler_id: ~とすることで、php.iniSessionセクションの設定値をそのまま読み込むようになります。
Symfony2では、この設定をしないとini_set()で設定を変更してしまいます2

デプロイ

Gitのリポジトリに追加して、git pushすればデプロイ完了です。

最後に

HerokuでMemcachedを有効にして、セッションを格納できるようになりました。
デプロイする度にSymfony2のキャッシュがクリアされてしまい、app/cache/<env>/sessionsに格納されていたセッションファイルも削除されるためセッションが切れてしまっていましたが、Memcachedに格納することでデプロイしてもセッションを保つことができるのでより実用的に使えるのではないかと思います。

  1. .user.iniを使う方法もあります []
  2. 僕がここが一番ハマったところです []

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*