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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

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

Docker

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

Q&A

1回答

917閲覧

docker、railsの環境構築

fumi_777

総合スコア0

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2022/01/09 05:49

前提・実現したいこと

dockerを使って、railsの環境構築をしたい。
使うコンテナはmysql、redis、rails。

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

docker-compose exec app bundle exec foreman start -f Procfile.dockerでrails serverを立ち上げようとするとredisのconnectionエラーが発生し、sidekic無しでrails serverを立ち上げるとmysqlのconnectionエラーが発生します。どちらもcontainerは問題なく立ち上がっており、サーバーへのアクセスもできる状態です。どなたか原因わかる方いらっしゃいましたらアドバイス頂きたいです!!

redisのエラー

sidekiq.1 | Error connecting to Redis on localhost:6379

mysqlのエラー

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

該当のソースコード

docker-compose.yaml

version: "3" services: mysql: image: mysql:5.7.26 restart: always environment: MYSQL_ROOT_PASSWORD: root volumes: - 省略 redis: image: redis:5.0.7 restart: always volumes: - 省略 app: stdin_open: true tty: true build: context: . entrypoint: bash environment: REDIS_URL: redis://redis:6379/ HISTFILE: /app/log/.bash_history EDITOR: vi DB_USERNAME: root DB_PASSWORD: root DB_HOST: mysql SESSION_REDIS_HOST: redis WORKER_REDIS_SERVER: redis://redis:6379/5 WORKER_REDIS_CLIENT: redis://redis:6379/5 ports: - "3000:3000" volumes: - 省略 depends_on: - mysql - redis volumes: 省略

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

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

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

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

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

guest

回答1

0

こんばんは。
docker-compose.yaml には mysql や redis の URLを環境変数で渡すようになっていますが、app 側の設定ではこの値をうまく受け取れていないみたいです。
(MySQL がソケットでの接続になっている、Redis を localhost で呼び出している)

Rails アプリケーション側でこの環境変数を利用すると思うのですが、ソースコード側はどうなっているでしょうか?
database.yml とか redis.yml とか sidekiq の設定ファイル関連を見てみるると良いのでは。

追記

docker-compose 以外の環境では、このアプリケーションは実行されてはいない状況でしょうか?
(ローカル開発環境で、直接RailsやMySQLを動かす形)
あと、DBのレプリケーションをする際は、コネクションモデルのカスタマイズが必要な気がします。
それを行っていないのだとすると、データーベースは development モードの標準の設定(直下の設定)を見るような気がします。

まずは、ご提示いただいた development の設定のところを、

development:  primary:   <<: *writing   database: development  primary_replica:   <<: *reading   database: development

ではなくて、以下ではどうでしょう?

(1) primary, primary_replicaを外して、development 直下に設定を書く。

development: <<: *writing  database: development

(2) あるいは、primary, primary_replicaを残しつつ、development 直下に設定を書く。

development: <<: *writing  database: development  primary:   <<: *writing   database: development  primary_replica:   <<: *reading   database: development

投稿2022/01/09 10:12

編集2022/01/10 12:43
suama

総合スコア1997

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

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

fumi_777

2022/01/09 10:50 編集

こんばんは! ご回答ありがとうございます!! 環境変数であるSESSION_REDIS_HOSTの値をlocalhostからredisに変更したらredisのエラーは解消されました!ありがとうございます! mysqlの方はまだ同じエラーが出ており、、、 database.yml ``` default: &default  adapter: mysql2  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>  database: ""  username: 省略  password: 省略  host: mysql  port: 3306 development:  primary:   <<: *default   database: 省略 ```
suama

2022/01/09 11:51 編集

あとは、database.yml のところでしょうか。 ひとまず、そのままだと development モードでの起動になり、database.yml の default の設定を引き継ぐとは思うのですが、developement 以下、さらに primary っていう階層があるので、そちらが気になりますね。 なにかDBのレプリケーションなどを考慮されているのでしょうか? いちど、primary を外して一階層上げる設定にするとどうでしょう? ``` development: <<: *default database: 省略 ``` あと、Rails は config/databasse.yml に指定していなくても DATABASE_URL という環境変数を優先しますので、docker-compose.yml に指定してみるといいかもしれません。 ----- ... DB_HOST: mysql DATABASE_URL: mysql2://root:root@mysql:3306/想定のデーターベース名 ... ----- ※ docker-compose を利用すると、内部のDNS で myql とか redis というホスト名を名前解決してくれます。
fumi_777

2022/01/09 16:18

ご返信ありがとうございます!! すみません、ちなみにこちらはローカル環境でのエラーとなります! database.ymlについてですがご認識の通りレプリケーションを考慮しており、primary、primary_replicaで構成されています! DATABASE_URLを追加しましたら、404エラーになってしまいました????‍♂️ ``` Processing by ErrorsController#not_found as HTML [active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.93ms) Completed 404 Not Found in 18ms (Views: 3.1ms | Allocations: 4593) ```
suama

2022/01/09 23:29

ありがとうございます。マルチDB なのですね。 そのあたりは、ご質問のところに環境情報として載せておくと良いと思います。切り分けがしやすくなるので...。 > database.ymlについてですがご認識の通りレプリケーションを考慮しており、primary、primary_replicaで構成されています! こちらのドキュメントのように、コネクションモデルをカスタマイズされたりしていますか?もしカスタマイズしていたら、そちらもなにか情報があるといいかなと思います。 https://railsguides.jp/active_record_multiple_databases.html docker_compose.yml を見る限りでは、DB は1つだけですね。 どちらにしても期待しているDBの設定が見つからなくて、ソケット接続をしに行っている感じがしますね。 database.yml ``` default: &default  adapter: mysql2  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>  database: ""  username:  password:  host: mysql  port: 3306 development:  primary:   <<: *default   database: 省略 ``` エラーメッセージの全体とかがあれば、添付していただけるといいと思います。
fumi_777

2022/01/10 03:27 編集

ご回答ありがとうございます!! >そのあたりは、ご質問のところに環境情報として載せておくと良いと思います。切り分けがしやすくなるので...。 失礼しました????‍♂️ 特にコネクションモデルをいじったりはしておりません! database.yml ``` writing: &writing  adapter: mysql2  encoding: utf8mb4  charset: utf8mb4  collation: utf8mb4_bin  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>  database: ""  username: root  password: ****  host: mysql  port: 3306 reading: &reading  <<: *writing  database: ""  username: root  password: ****  host: mysql  port: 3306  replica: true development:  primary:   <<: *writing   database: development  primary_replica:   <<: *reading   database: development ``` docker-compose.yml ``` version: "3" services:  mysql:   image: mysql:5.7.26   restart: always   ports:    - "3306:3306"   environment:    MYSQL_ROOT_PASSWORD: ****   volumes:    - 省略  redis:   image: redis:5.0.7   restart: always   ports:    - "6379:6379"   volumes:    - 省略  app:   stdin_open: true   tty: true   build:    context: .   entrypoint: bash   environment:   REDIS_URL: redis://redis:6379/   HISTFILE: /app/log/.bash_history   EDITOR: vi   DB_USERNAME: root   DB_PASSWORD: ****   DB_HOST: mysql   SESSION_REDIS_HOST: redis   WORKER_REDIS_SERVER: redis://redis:6379/5   WORKER_REDIS_CLIENT: redis://redis:6379/5   ports:    - "3000:3000"   volumes:    - 省略   depends_on:    - mysql    - redis   volumes:    省略 ```
fumi_777

2022/01/10 03:32

docker ps した際のmysqlコンテナのポートはこちらです! 0.0.0.0:3306->3306/tcp, 33060/tcp エラー内容は下記となります! エラー内容 ``` Mysql2::Error::ConnectionError Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) mysql2 (0.5.3) lib/mysql2/client.rb:90:in `connect' mysql2 (0.5.3) lib/mysql2/client.rb:90:in `initialize' activerecord (6.0.3.4) lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new' activerecord (6.0.3.4) lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:887:in `new_connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:931:in `checkout_new_connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:910:in `try_to_checkout_new_connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:871:in `acquire_connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:593:in `checkout' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:437:in `connection' activerecord (6.0.3.4) lib/active_record/connection_adapters/abstract/connection_pool.rb:1119:in `retrieve_connection' activerecord (6.0.3.4) lib/active_record/connection_handling.rb:221:in `retrieve_connection' activerecord (6.0.3.4) lib/active_record/connection_handling.rb:189:in `connection' activerecord (6.0.3.4) lib/active_record/migration.rb:562:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call' activesupport (6.0.3.4) lib/active_support/callbacks.rb:101:in `run_callbacks' actionpack (6.0.3.4) lib/action_dispatch/middleware/callbacks.rb:26:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/executor.rb:14:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call' rollbar (3.1.1) lib/rollbar/middleware/rails/rollbar.rb:25:in `block in call' rollbar (3.1.1) lib/rollbar.rb:145:in `scoped' rollbar (3.1.1) lib/rollbar/middleware/rails/rollbar.rb:22:in `call' better_errors (2.9.1) lib/better_errors/middleware.rb:62:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call' rollbar (3.1.1) lib/rollbar/middleware/rails/show_exceptions.rb:22:in `call_with_rollbar' web-console (4.1.0) lib/web_console/middleware.rb:132:in `call_app' web-console (4.1.0) lib/web_console/middleware.rb:19:in `block in call' web-console (4.1.0) lib/web_console/middleware.rb:17:in `catch' web-console (4.1.0) lib/web_console/middleware.rb:17:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call' railties (6.0.3.4) lib/rails/rack/logger.rb:37:in `call_app' railties (6.0.3.4) lib/rails/rack/logger.rb:26:in `block in call' activesupport (6.0.3.4) lib/active_support/tagged_logging.rb:80:in `block in tagged' activesupport (6.0.3.4) lib/active_support/tagged_logging.rb:28:in `tagged' activesupport (6.0.3.4) lib/active_support/tagged_logging.rb:80:in `tagged' railties (6.0.3.4) lib/rails/rack/logger.rb:26:in `call' sprockets-rails (3.2.2) lib/sprockets/rails/quiet_assets.rb:13:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/remote_ip.rb:81:in `call' request_store (1.5.0) lib/request_store/middleware.rb:19:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/request_id.rb:27:in `call' rack (2.2.3) lib/rack/method_override.rb:24:in `call' rack (2.2.3) lib/rack/runtime.rb:22:in `call' activesupport (6.0.3.4) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/executor.rb:14:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/static.rb:126:in `call' rack (2.2.3) lib/rack/sendfile.rb:110:in `call' actionpack (6.0.3.4) lib/action_dispatch/middleware/host_authorization.rb:82:in `call' rack-cors (1.1.1) lib/rack/cors.rb:100:in `call' rack-mini-profiler (2.2.0) lib/mini_profiler/profiler.rb:368:in `call' railties (6.0.3.4) lib/rails/engine.rb:527:in `call' puma (3.12.6) lib/puma/configuration.rb:227:in `call' puma (3.12.6) lib/puma/server.rb:706:in `handle_request' puma (3.12.6) lib/puma/server.rb:476:in `process_client' puma (3.12.6) lib/puma/server.rb:334:in `block in run' puma (3.12.6) lib/puma/thread_pool.rb:135:in `block in spawn_thread' ```
suama

2022/01/10 12:43

ありがとうございます!思い当たるところを追記してみました。
fumi_777

2022/01/10 13:58

追記誠にありがとうございます????‍♂️ >docker-compose 以外の環境では、このアプリケーションは実行されてはいない状況でしょうか? はい!こちらdocker-compose以外ではrails、mysqlを入れておりません! コードを追ったらコネクションモデルのカスタマイズを行っていました!そのため、development 直下に設定を書くように変更したらrails serverの立ち上げの時点でコケてしまいました????‍♂️ ``` /bundle/gems/activerecord-6.0.3.4/lib/active_record/connection_adapters/connection_specification.rb:250:in `resolve_symbol_connection': The `primary_replica` database is not configured for the `development` environment. (ActiveRecord::AdapterNotSpecified) ```
suama

2022/01/10 14:15

(2)のほうはどうでしょうか?
fumi_777

2022/01/10 15:09

(2)も上記同様のエラーが発生しました????‍♂️
suama

2022/01/10 22:33

The `primary_replica` database is not configured for the `development` environment. とあるのですが、カスタマイズしたクラス側はどうなっているでしょう? ``` connects_to database: { writing: :primary, reading: :primary_replica } ``` みたいになっていると思いますが、タイポなどがないか、クラス側の指定とかマイグレーションの設定側に問題がないか確認してみてください。 あとはちょっと部分的なところではわからないですね。 可能ならマルチDBではない構成でまず確認するのが良いとは思いますが...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問