5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

redisとruby on railsの連携

Last updated at Posted at 2019-03-30

環境
macOS Mojava 10.14.4
Docker 18.09.2
Rails 5.2.2
ruby 2.6.1p33

Webアプリケーションのセッション管理の方法はいくつかあるのですが、ruby on railsは特に指定しなければローカルのCookieにセッションが保存されます。
この状態でrailsを動作させるとCookieが作成されています。
Safariだと
Safari > 環境設定 > プライバシー > CookieとWebサイトのデータ:
を確認すると127.0.0.1のWebサイトのデータが保存されています。(ローカル開発時)

開発だけであればいいんですが、実際の環境でユーザーCookieでセッション情報を管理するのは問題があるのでredisで管理するようにしました。

redisをインストール

$brew install redis
・・・インストールログ・・・
==> Summary
🍺  /usr/local/Cellar/redis/5.0.4: 13 files, 3.1MB

なんかログにビールが出ました。多分成功の証です。

$redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused

インストールできていました。
redisサーバーが起動してないので接続できていません。

せっかくなんで学習のため、redisサーバーはDockerコンテナを使ってみようかと思います。
Dockerのインストールはこちらを参考にしました。
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81

redisのDockerコンテナーの起動
停止したら削除するために--rmをつけます。
-pでコンテナのポートを公開します。(ホストのポート6379をコンテナのポート6379に接続)

$docker container run --name local-redis -d --rm -p 6379:6379 redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
27833a3ba0a5: Pull complete 
cde8019a4b43: Pull complete 
97a473b37fb2: Pull complete 
c6fe0dfbb7e3: Pull complete 
39c8f5ba1240: Pull complete 
cfbdd870cf75: Pull complete 
Digest: sha256:000339fb57e0ddf2d48d72f3341e47a8ca3b1beae9bdcb25a96323095b72a79b
Status: Downloaded newer image for redis:latest
cbc1a37039dab71ce996cecdae2cd7cbdbbb78cd76e281ff5837eac3113dd403

dockerイメージがローカルにない場合はDocker Hubから自動でPullしてくれます。
https://hub.docker.com

redisのコンテナが動作しているかの確認

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
cbc1a37039da        redis               "docker-entrypoint.s…"   51 seconds ago      Up 50 seconds       0.0.0.0:6379->6379/tcp   local-redis

--nameで指定した名前がNAMESに出力されています。(コンテナの名称)

接続できることを確認します。

redis-cli
127.0.0.1:6379> 

exitを入力し、終了

redisサーバーが用意できたので、railsのセッションをredisで管理するように変更します。

redisを使うためGemfileにredis-railsを追加します。

Gemfile
gem ‘redis-rails’

インストールを行います。

bundle install

railsのセッションの設定を行います。
config/initializers/session_store.rbにredisにセッション情報を格納することを記載します。
特に何も設定していない場合はsession_store.rbは存在しないので作成します。

session_store.rb
Rails.application.config.session_store :redis_store, {
  servers: [
   {
     host: ENV['REDIS_HOST'] || 'localhost',
     port: ENV['REDIS_PORT'] || 6379,
     db: 0,
     namespace: 'session'
   }
  ],
  expire_after: 10.minutes
}

これでセッション情報はredisに記録されるようになります。
実際にredisコンテナを停止させてからrailsを起動するとredisに接続できないことによるエラーが発生します。
SafariでCookieを確認しても127.0.0.1のWebサイトの情報はなくなります。

ローカル開発でこれをやると、毎回redisコンテナを起動させないとエラーで落ちてしまうのでなにか自動化は別途しようと思います。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?