質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

8302閲覧

docker-composeを使ってRailsからRedisを利用したい。

stratruss

総合スコア6

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2018/09/05 23:54

編集2018/09/07 06:38

docker-composeを使ってRailsからRedisを利用したい。

docker-composeを使用してRailsの環境構築をしています。
試しにRedisのコンテナを追加したのですが、Rails側でポート関連のエラー?が出てしまいました。
解決策をご存知の方がいらっしゃいましたら教えていただきたいです。

発生している問題・エラーメッセージ

URL: http://localhost:3000/users

  • MVCはscaffoldを使って作ったそのままの状態です。
Errno::EADDRNOTAVAIL in Users#index Showing /app/app/views/layouts/application.html.erb where line #5 raised: Cannot assign requested address - connect(2) for [::1]:6379 Extracted source (around line #5): <head> <title>App</title> <%= csrf_meta_tags %> <%= stylesheet_link_tag 'application', media: 'all' %> <%= javascript_include_tag 'application' %>

<%= csrf_meta_tags %>の箇所でエラーが出ているようです。

該当のソースコード

config/initializers/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: 90.minutes }

docker-compose.yml

version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b 0.0.0.0 ports: - 3000:3000 volumes: - .:/app depends_on: - db tty: true stdin_open: true db: image: mysql:5.7 volumes: - db-volume:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 非公開 redis: image: redis volumes: db-volume:

$ docker-compose psでは以下のように表示されました。

$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------- rails_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp rails_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp rails_web_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp

試したこと

上記のdocker-compose.ymlbのRedisにportsを指定

docker-compose.yml

redis: image: redis ports: - 6379:6379

$ docker-compose psでは以下のように表示されました。

$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------- rails_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp rails_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp rails_web_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp

しかし、エラーメッセージに変化はありませんでした。

補足情報(FW/ツールのバージョンなど)

#####Ruby
2.3.7

####gem

* rails (5.0.7) * redis (4.0.2) * redis-actionpack (5.0.2) * redis-activesupport (5.0.7) * redis-rack (2.0.4) * redis-rails (5.0.2) * redis-store (1.5.0)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

docker-compose.ymlにてredisのports指定に加えてweb(railsコンテナ)のenvironmentにREDIS_HOST: redisREDIS_PORT: 6379を追加して環境変数をあらかじめ設定しておくことで該当のエラーが解消されました。

最終的に以下のようになりました。

docker-compose.yml

version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b 0.0.0.0 ports: - 3000:3000 volumes: - .:/app depends_on: - db tty: true stdin_open: true db: image: mysql:5.7 volumes: - db-volume:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 非公開 redis: image: redis volumes: db-volume:

投稿2018/09/06 00:07

編集2018/09/07 06:39
stratruss

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問