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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

1回答

1300閲覧

circleciでのデーターベースのセットアップでエラーになる

Pichan.

総合スコア4

docker-compose

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

1グッド

1クリップ

投稿2020/03/12 14:19

編集2022/01/12 10:55

前提・実現したいこと

docker-compose環境にてrailsのアプリを作成しています。
circleciでデーターベースのセットアップ事に
Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
と、エラーになりデーターベースが作成できません。
ネットにあるcircleciの記事のやり方や同じようなエラーの解決策をいろいろ試してみましたがどれを試してもdb:createのところで同じエラーが起こります。

かなり長い時間を費やしましたが解決策がわからす質問させていただきました。どなたか分かる方がいましたらご教授していただけると助かります。
よろしくお願いします。

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

#!/bin/bash -eo pipefail docker-compose run web bin/rails db:create db:migrate RAILS_ENV=test RAILS_MASTER_KEY=${RAILS_MASTER_KEY} Starting project_db_1 ... Starting project_chrome_1 ... Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused") Couldn't create 'ci_test' database. Please check your configuration. rails aborted! Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused") /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `connect' /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `initialize' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `new' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/mysql2_adapter.rb:22:in `mysql2_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:830:in `new_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:874:in `checkout_new_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `try_to_checkout_new_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:814:in `acquire_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:538:in `checkout' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:382:in `connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1033:in `retrieve_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_handling.rb:118:in `retrieve_connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/connection_handling.rb:90:in `connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/mysql_database_tasks.rb:6:in `connection' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/mysql_database_tasks.rb:14:in `create' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:119:in `create' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:139:in `block in create_current' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:316:in `block in each_current_configuration' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:313:in `each' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:313:in `each_current_configuration' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/tasks/database_tasks.rb:138:in `create_current' /usr/local/bundle/gems/activerecord-5.2.4.1/lib/active_record/railties/databases.rake:29:in `block (2 levels) in <top (required)>' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands/rake/rake_command.rb:20:in `perform' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/command.rb:48:in `invoke' /usr/local/bundle/gems/railties-5.2.4.1/lib/rails/commands.rb:18:in `<top (required)>' /app/bin/rails:9:in `require' /app/bin/rails:9:in `<top (required)>' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call' /usr/local/bundle/gems/spring-2.1.0/lib/spring/client.rb:30:in `run' /usr/local/bundle/gems/spring-2.1.0/bin/spring:49:in `<top (required)>' /usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' /usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' /app/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' Tasks: TOP => db:create (See full trace by running task with --trace) Exited with code exit status 1

該当のソースコード

docker-compose.yml

version: '2' services: db: image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root ports: - "3306:3306" web: build: . command: bundle exec puma -C /app/config/puma.rb volumes: - .:/app ports: - "3000:3000" links: - db depends_on: - db - chrome tty: true chrome: image: selenium/standalone-chrome:3.141.59-dubnium ports: - 4444:4444 nginx: build: containers/nginx ports: - "80:80" volumes_from: - web depends_on: - web

database.ci.yml

test: adapter: mysql2 encoding: utf8mb4 pool: 5 username: 'root' port: 3306 host: 'db' database: ci_test

circleci/config.yml

version: 2 jobs: build: machine: image: circleci/classic:edge steps: - checkout - run: name: change database.yml command: | rm ./config/database.yml mv ./config/database.ci.yml ./config/database.yml - run: name: build command: docker-compose build - run: name: docker-compose up command: docker-compose up -d - run: name: sleep for waiting launch db command: sleep 1 - run: name: dbsetup command: docker-compose run web bin/rails db:create db:migrate RAILS_ENV=test RAILS_MASTER_KEY=${RAILS_MASTER_KEY} - run: name: RSpec test command: docker-compose run web bin/rspec - run: name: docker-compose down command: docker-compose down

試したこと

ローカル環境ではdocker-compose dowon させてからbuildしてdb:create migrate問題なくできます。
config.ymlでのsleep後にdocker-compose logsコマンドを入れてコンテナの状態です。
RAILS_MASTER_KEYを渡せずwebサーバーでundefined method `[]' for nil:NilClassが出ています。
devise.rbではomniauthの環境変数をcredentialsで渡している為です。

#!/bin/bash -eo pipefail docker-compose logs Attaching to project_nginx_1, project_web_1, project_chrome_1, project_db_1 web_1 | Puma starting in single mode... web_1 | * Version 3.12.4 (ruby 2.5.1-p57), codename: Llamas in Pajamas web_1 | * Min threads: 5, max threads: 5 web_1 | * Environment: development web_1 | ! Unable to load application: NoMethodError: undefined method `[]' for nil:NilClass web_1 | bundler: failed to load command: puma (/usr/local/bundle/bin/puma) db_1 | 2020-03-15 08:15:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.29-1debian10 started. web_1 | NoMethodError: undefined method `[]' for nil:NilClass web_1 | /app/config/initializers/devise.rb:305:in `block in <top (required)>' db_1 | 2020-03-15 08:15:59+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' db_1 | 2020-03-15 08:15:59+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.29-1debian10 started. db_1 | 2020-03-15 08:15:59+00:00 [Note] [Entrypoint]: Initializing database files db_1 | 2020-03-15T08:15:59.597544Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). web_1 | /usr/local/bundle/gems/devise-4.7.1/lib/devise.rb:311:in `setup' db_1 | 2020-03-15T08:16:00.208657Z 0 [Warning] InnoDB: New log files created, LSN=45790 web_1 | /app/config/initializers/devise.rb:5:in `<top (required)>' db_1 | 2020-03-15T08:16:00.277089Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. web_1 | /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:285:in `load' db_1 | 2020-03-15T08:16:00.339860Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 3464bb45-6695-11ea-8dbb-0242ac120002. web_1 | /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:285:in `block in load' db_1 | 2020-03-15T08:16:00.343072Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. web_1 | /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:257:in `load_dependency' db_1 | 2020-03-15T08:16:03.233002Z 0 [Warning] CA certificate ca.pem is self signed. web_1 | /usr/local/bundle/gems/activesupport-5.2.4.1/lib/active_support/dependencies.rb:285:in `load' db_1 | 2020-03-15T08:16:03.863511Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

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

rails 5.2
Mysql 5.7
ruby 2.5.1

s.k👍を押しています

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

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

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

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

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

unhappychoice

2020/03/15 01:52 編集

スタックトレースにある通り `/app/config/initializers/devise.rb:305` に直接の原因があるので、その部分を見ないとなんとも言えないと思います
Pichan.

2020/03/15 01:49

ご指摘ありがとうございます! 現在 devise.rbでcredentialsを使った環境変数を渡していた為上記のエラーになっていたみたいだったのでcircleci側でRAILS_MASTER_KEYの環境変数を設定しdb:create時に渡してみました。NoMethodError: undefined method `[]' for nil:NilClassは解決できたみたいですがmysqlにつなぐことが出来ずに困っております。databese.ci.ymlの中身を記載の様に変更してみましたがダメでした。 何かアドバイス頂けると幸いです。
guest

回答1

0

docker-compose.yml

# links: # - db

コメントアウトを外して link を設定しつつ、

~~```
test:
adapter: mysql2
encoding: utf8mb4
pool: 5
username: 'root'
port: 3306
host: 'db'
database: ci_test

~~と host を db でいかがでしょうか。~~ `sleep 1` だと Database のコンテナが立ち上がっていたとしても、データベースのプロセスが立ち上がっているとは限らないので、 sleep を長くしてみてはいかがでしょうか もしそれで解決するのであれば、単に sleep よりは https://github.com/jwilder/dockerize 等利用して必要分だけ wait かけることをおすすめしますmm

投稿2020/03/15 02:00

編集2020/03/15 02:41
unhappychoice

総合スコア1531

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

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

Pichan.

2020/03/15 02:20

回答ありがとうございます。変更点を加えCircleCIを実行したところ、同じようにエラーになりました。 Can't connect to MySQL server on 'db' (111 "Connection refused") Couldn't create 'ci_test' database. Please check your configuration. rails aborted! Mysql2::Error: Can't connect to MySQL server on 'db' (111 "Connection refused")
Pichan.

2020/03/15 08:20

アドバイスありがとうございます。sleep3で実行してみたのですが結果は変わらずでした。その後もいろいろ試してみましたが繋がらずでした。circleciにlogを入れて確認をしてみたところwebサーバーで前回のエラーが合ったので環境変数を渡そうとしましたが上手く渡せず出ています。db:create時には渡せているみたいです。logを追記します。dbサーバーでもパスワードがないとあるのですがdatabase.ci.ymlにpasswordの追記をしてみましたがダメでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問