joppot

コピペで絶対動く。説明を妥協しない

サーバ プログラミング

memcachedサーバとruby on railsのdalliを使用してセッションを管理する

投稿日:2014年7月11日 更新日:

Pocket

splash-311140_1280

概要

みなさんこんにちはcandleです。今回はmemcachedサーバを利用してrailsのセッションを管理してみたいと思います。

一般にrailsでセッション管理をしていると、ブラウザのcookieに保存されます。
下のサンプルはdeviseでログインした時のsessionの情報です。

sessiondata

cookieにありますね。

それをmemcachedで管理してみたいと思います。
cookieで管理しない理由としては処理速度が速いとか、個々の機種に依存しないとかだと思います。

前提
memcachedサーバを立てている
立てていない人はこのブログの下の記事を参照してください。

macにmemcachedをインストールする方法と動作確認

Ubuntuにmemcachedをインストールする方法と動作確認

SPONSORED LINK


dalliをインストールする

適当なrailsプロジェクトで、Gemfileを開いて下の記述をしましょう。

gem "dalli"

addtogemfile

そしたら、下のコマンドでdalliをrailsプロジェクトにインストールします。

bundle install

これでインストールされました。

memcachedを立ち上げる

railsアプリケーションと同じサーバにmemcachedサーバを立てても、良いのですが、冗長性が無いので、railsアプリケーションが動いているサーバとmemcachedサーバを別にして設定してみたいと思います。

doubleserver

railsアプリケーションを動かしているサーバとは別のPCでmemcachedを動かしましょう。
やり方として、同じLANの中の別のサーバかvirtual boxにmemcachedサーバをたてましょう。

私は同じLANの別のMacサーバ上で動かします。

まずはmemcachedサーバのプライベートIPアドレスを調べます。

ifconfig

memcachecheckipadress

私のmemcachedのサーバのIPアドレスは192.168.2.115ですね。
把握できたので、memcachedサーバを動かします。

macの場合ですとlaunchctlで既に起動している場合があります。
下のコマンドで実行中のmemcachedサーバを見れます。

ps aux | grep memcached

もしも実行されているならば止めてください。

brewでmemcachedを入れているなら、下のコマンドでサーバを起動します。

memcached -vv

すると、memcachedのリアルタイムのアクセスが見れます。

listening

これでmemcached側の設定は終わりです。


rails側の設定

rails側では先ほどdalliを入れました。

config/environments/development.rbを開きます。

もしも本番環境でやるなら、config/environments/production.rbを開きます。私は開発環境でやるのでdevelopment.rbに下の内容を書き込みます。

config.cache_store = :dalli_store, 'cache-1.example.com', 'cache-2.example.com', { :namespace => NAME_OF_RAILS_APP, :expires_in => 1.day, :compress => true }

自分の場合だと、ですね。

config.cache_store = :dalli_store, '192.168.2.115', '192.168.2.115', { :namespace => Bootstrap3, :expires_in => 1.day, :compress => true }

dallistore-1

注意点としては、:namespaceのアプリの名前の頭文字は大文字から始まります。

次に、config/initializers/session_store.rbを開きます。
デフォルトだと、cookieになっていると思います。

Bootstrap3::Application.config.session_store :cookie_store, key: '_bootstrap3_session'

これをコメントアウトして、下の記述を書き込みます。

Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 1.day

こんな感じですね。

changesessiontype

設定は以上です。
ということで、railsサーバを立ち上げてみましょう。

bundle exec rails s

deviseでログインしてみましょう。

loginwithdevise

すると、memcachedに反応があります。

memcachelog

どうやら、sessionがmemcachedに保存されているらしいですね。
ページのキャッシュとかもそっちに保存されているらしく噂の通り20倍くらい早い気がします。


まとめ

設定のあたりで一度躓いてしまい大変でしたが出来てしまえば案外楽でした。
質問などがあれば下のコメント欄かtiwtterでお願いします。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ, プログラミング
-

執筆者:


comment

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

関連記事

phpとmysqlでアカウント管理する時のテストユーザーのパスワードの暗号化はmysqlのsha1でもできる

by brewbooks 概要 みなさんこんにちはcandleです。最近はphpでサービスを書いたりしています。その中でテストユーザーのアカウント管理でパスワードを暗号化してデータベースに収めています …

railsのfluent-logger gemを使ってユーザーのアクセスをfluentdサーバに収集する

概要 みなさんこんにちはcandleです。前回からfluentd関連の記事を続けていますが、今回辺りから実用的な使い方を書いていきたいと思います。 fluentdと言えば、ビックデータで扱うようなデー …

MysqlのSELECT FROMの結果を美しく、見やすく表示する

概要 みなさんこんにちはcandleです。今回はmysqlのデータベースに関する簡単な記事です。 データベース系の言語は最近、様々出てきましたが、私は未だにMysqlくらいしか触っていません。 私はp …

MAMPにCakePHPを導入して動かす

概要 みなさんこんにちはcandleです。今回はMAMPでCakePHPを動かす環境設定を行いましょう。 条件 MAMPがインストールされている CakePHPをダウンロードする 下のCakePHPの …

出力fluentdから収集fluentdへforwardを使ってログデータを送信する方法

概要 みなさんこんにちはcandleです。今回はfluentdサーバを2台使って、ログの収集を行ってみたいと思います。サーバ2台はどのような環境でも良いのですが、私が今回説明する環境は1つはMac P …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ