実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。