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

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

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

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

Ruby on Rails 6

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

MySQL

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

Docker

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

Circle CI

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

Q&A

解決済

1回答

434閲覧

【Circleci】docker-compose run web bundle exec rails db:create ができない

taba.3011

総合スコア12

docker-compose

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

Ruby on Rails 6

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

MySQL

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

Docker

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

Circle CI

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

0グッド

0クリップ

投稿2023/05/28 06:35

実現したいこと

Circleciでdockerコンテナ内にDBをcreateしたいです。

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

.circleci/config.ymlファイルで以下のようにするとエラーが出ます。

yml

1 - run: 2 name: Build and test 3 command: | 4 docker-compose build --quiet --no-cache 5 docker-compose run web bundle exec rails db:create
Can't connect to MySQL server on 'db' (115) Couldn't create 'myapp_development' database. Please check your configuration. rake aborted! ActiveRecord::ConnectionNotEstablished: Can't connect to MySQL server on 'db' (115)

.circleci/config.yml

yml

1version: 2.1 2 3orbs: 4 ruby: circleci/ruby@2.0.1 5 node: circleci/node@5.1.0 6 7# このプロジェクトで実行するジョブの定義 8jobs: 9 build-and-test: 10 docker: 11 - image: cimg/ruby:3.2.1-browsers 12 - image: circleci/mysql:5.7 13 environment: 14 MYSQL_ROOT_PASSWORD: password 15 DB_PASSWORD: ${DB_PASSWORD} 16 working_directory: ~/repo 17 steps: 18 - checkout 19 - setup_remote_docker 20 - restore_cache: 21 keys: 22 - v1-dependencies-{{ checksum "Gemfile.lock" }} 23 - v1-dependencies-{{ checksum "yarn.lock" }} 24 - v1-dependencies- 25 - run: 26 name: Bundle install 27 command: | 28 bundle install --path ./vendor/bundle 29 - save_cache: 30 paths: 31 - ./vendor/bundle 32 key: v1-dependencies-{{ checksum "Gemfile.lock" }} 33 - run: 34 name: Build and test 35 command: | 36 docker-compose build --quiet --no-cache 37 docker-compose run web bundle exec rails db:create 38 docker-compose run web bundle exec rails db:migrate 39 docker-compose run web yarn install --check-files 40 docker-compose run web bundle exec rails webpacker:compile 41 docker-compose run web bundle exec rspec 42 - save_cache: 43 paths: 44 - ./node_modules 45 key: v1-dependencies-{{ checksum "yarn.lock" }} 46 47workflows: 48 build-and-test: 49 jobs: 50 - build-and-test

docker-compose.yml

yml

1version: '3' 2 3services: 4 db: 5 image: mysql:5.7 6 volumes: 7 - to_do_app_data:/var/lib/mysql 8 environment: 9 MYSQL_ROOT_PASSWORD: password 10 ports: 11 - 3306:3306 12 web: 13 container_name: to_do_app 14 build: . 15 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 16 volumes: 17 - .:/src/myapp 18 ports: 19 - "3000:3000" 20 depends_on: 21 - db 22volumes: 23 to_do_app_data:

config/database.yml

yml

1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: password 7 host: db

試したこと

.circleci/config.ymlの環境変数に色々設定してみましたが上手くいきませんでした。

yml

1jobs: 2 build-and-test: 3 docker: 4 - image: cimg/ruby:3.2.1-browsers 5 - image: circleci/mysql:5.7 6 environment: 7 MYSQL_ALLOW_EMPTY_PASSWORD: 'true' 8 DATABASE_USERNAME: root 9 MYSQL_ROOT_PASSWORD: 'password' 10 DB_PASSWORD: 'password' 11 DATABASE_HOST: db 12 DATABASE_HOST: '127.0.0.1' #database.ymlのhostを'127.0.0.1'に変更して

色々調べてみたのですが、どれも環境変数の設定方法によるものでした。
Circleciを使用せずローカル環境で該当のコマンドを実行すると上手くいきます。そのため何が間違っているのかの見当がつかず、途方に暮れている状態です。

環境変数の設定に間違いがあるのでしょうか?また、環境変数の問題ではないのでしょうか?どなたかお力添えいただけると幸いです。

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

Ruby 3.2.1
Rails 6.1.7.3

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

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

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

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

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

guest

回答1

0

自己解決

docker-compose buildの後にdocker-compose up -dをし、DBの接続を待機するためにsleep 10を実行したら解決できました。
.circleci/config.yml

yml

1 - run: 2 name: Build and test 3 command: | 4 docker-compose build --quiet --no-cache 5 docker-compose up -d 6 - run: 7 name: db接続を待機 8 command: sleep 10 9 - run: 10 name: create 11 command: | 12 docker-compose run web bundle exec rails db:create 13 docker-compose run web bundle exec rails db:migrate 14 docker-compose run web yarn install --check-files 15 docker-compose run web bundle exec rails webpacker:compile 16 docker-compose run web bundle exec rspec

また、環境変数の設定が間違っていたのかと思いましたが違ったみたいです。
お手数おかけしました。

投稿2023/05/28 09:01

taba.3011

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問