🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
docker-compose

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

Ruby on Rails 5

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

MySQL

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

データベース

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

Docker

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

Q&A

解決済

1回答

512閲覧

Dockerを使ったRails+MySqlの環境構築におけるdb:createのエラー

Arly3

総合スコア5

docker-compose

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

Ruby on Rails 5

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

MySQL

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

データベース

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

Docker

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

0グッド

0クリップ

投稿2019/10/19 02:48

編集2019/10/19 13:11

前提・実現したいこと

現在、ポートフォリオ作成のための掲示板アプリのようなものを製作しています。
先日まではCloud9上で開発を行なっていたのですが、環境構築の勉強と色んな技術に触れてみたいと思い、Dockerを用いてローカル環境での開発に取り組みはじめました。

アプリはすでにherokuを用いて公開していたのでheroku masterからpullを行いデータを持ってきてそこにDockerfile、docker-compose.ymlを作成する形で環境構築を行なっています。

参考にしたのは以下のサイトです。
Docker+MySQL+Railsの環境構築
既存のRailsアプリにDockerを導入する手順
発生している問題・エラーメッセージ

Docker+MySQL+Railsの環境構築

このページの流れに従ってdocker-compose buildを行い、docker-compose upまでは無事行うことができたのですが、docker-compose run web rails db:createを行う際にエラーが発生しました。ターミナルの実行結果は以下の通りです

Terminal

1$ docker-compose run web rails db:create 2Starting my-app_db_1 ... done 3rails aborted! 4ActiveRecord::AdapterNotSpecified: 'development' database is not configured. Available: ["default"] 5/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/connection_adapters/connection_specification.rb:260:in `resolve_symbol_connection' 6/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/connection_adapters/connection_specification.rb:241:in `resolve_connection' 7/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/connection_adapters/connection_specification.rb:143:in `resolve' 8/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/connection_handling.rb:57:in `establish_connection' 9/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/railtie.rb:136:in `block (2 levels) in <class:Railtie>' 10/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `instance_eval' 11/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:71:in `block in execute_hook' 12/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:62:in `with_execution_control' 13/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:67:in `execute_hook' 14/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:52:in `block in run_load_hooks' 15/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:51:in `each' 16/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/lazy_load_hooks.rb:51:in `run_load_hooks' 17/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/base.rb:328:in `<module:ActiveRecord>' 18/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/base.rb:27:in `<main>' 19/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 20/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 21/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 22/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 23/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 24/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require' 25/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency' 26/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require' 27/usr/local/bundle/gems/activerecord-5.2.3/lib/active_record/railties/databases.rake:17:in `block (2 levels) in <main>' 28/usr/local/bundle/gems/railties-5.2.3/lib/rails/commands/rake/rake_command.rb:23:in `block in perform' 29/usr/local/bundle/gems/railties-5.2.3/lib/rails/commands/rake/rake_command.rb:20:in `perform' 30/usr/local/bundle/gems/railties-5.2.3/lib/rails/command.rb:48:in `invoke' 31/usr/local/bundle/gems/railties-5.2.3/lib/rails/commands.rb:18:in `<main>' 32/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require' 33/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi' 34/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register' 35/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi' 36/usr/local/bundle/gems/bootsnap-1.4.5/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require' 37/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require' 38/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency' 39/usr/local/bundle/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require' 40/app_name/bin/rails:9:in `<top (required)>' 41/usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `load' 42/usr/local/bundle/gems/spring-2.1.0/lib/spring/client/rails.rb:28:in `call' 43/usr/local/bundle/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call' 44/usr/local/bundle/gems/spring-2.1.0/lib/spring/client.rb:30:in `run' 45/usr/local/bundle/gems/spring-2.1.0/bin/spring:49:in `<top (required)>' 46/usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `load' 47/usr/local/bundle/gems/spring-2.1.0/lib/spring/binstub.rb:11:in `<top (required)>' 48/app_name/bin/spring:15:in `<top (required)>' 49bin/rails:3:in `load' 50bin/rails:3:in `<main>' 51Tasks: TOP => db:create => db:load_config 52(See full trace by running task with --trace)

関連するソースコード

databaseyml

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 # docker-compose.ymlのservice名 8 9development: 10 <<: *default 11 database: myproject_development

*修正
RUN mkdir /workdir
ENV APP_ROOT /app-name

RUN mkdir /my-app
ENV APP_ROOT /my-app

Dockerfile

1FROM ruby:2.6.3 2ENV ruby_ver="2.4.3" 3ENV rails_ver="5.2.3" 4RUN apt-get update -qq && \ 5 apt-get install -y build-essential \ 6 libpq-dev \ 7 nodejs 8 9RUN mkdir /my-app 10ENV APP_ROOT /my-app 11WORKDIR $APP_ROOT 12 13COPY ./Gemfile $APP_ROOT/Gemfile 14COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock 15 16RUN gem install bundler:2.0.2 17RUN bundle install 18COPY . $APP_ROOT

dockercomposeyml

1version: '3' 2services: 3 db: 4 image: mysql:5.7 5 environment: 6 MYSQL_ROOT_PASSWORD: password 7 MYSQL_DATABASE: root 8 ports: 9 - "3306:3306" 10 11 web: 12 build: . 13 command: bundle exec rails s -p 3000 -b '0.0.0.0' 14 volumes: 15 - .:/my-app 16 ports: 17 - "3000:3000" 18 links: 19 - db:mysql

試したこと

Terminalの実行結果にActiveRecord::AdapterNotSpecified: 'development' database is not configured. Available: ["default"]とあるようにdevelopment環境での設定に問題がありそうだと思い、database.ymlの設定を調べながら色々変更してみたのですが、解決には至りませんでした。
経験が浅いため原因の見当もつかなくて申し訳ないです,,,
追記してほしい情報などあればコメントください。

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

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

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

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

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

Arly3

2019/10/19 03:40

Orlofskyさん指摘ありがとうございます。リンクの表記を修正しました。
guest

回答1

0

ベストアンサー

こんにちは。もしかしたら入力の際の間違いなのかとも思うのですが、以下が気になっています。

  • Dockerfileの作業用ディレクトリが違う
  • docker-compsose.yml でホスト側のソースコードをコンテナ側にマウントさせる際のパスが違う

おそらくこのあたりで、database.ymlが正しく読み取れていないのでは?と思います。

Dockerfile側も、docker-compose.yml 側も、/my-app/app-name に統一したらどうでしょう。
(いったん /my-app に揃えるのがいいですかね)

もし解決済みだったり、こちらの認識間違いでしたらご容赦を。

20191020: 追記

Dockerfile、docker-compose.ymlは修正してくださってもNGだったそうなので:

(1) パッケージを追加

MySQLを使うようなので、念のためMySQL ClientをRails用のイメージに追加してみてはいかがでしょうか。
mysql-client を追加。コンテナに入って調査したりするために、一旦 vimも入れるといいかもしれません)

yaml

1RUN apt-get update -qq && \ 2 apt-get install -y build-essential \ 3 libpq-dev \ 4 nodejs mysql-client

(2) 追加後にイメージの再ビルド

Dockerfileを更新したら、イメージの変更は勝手には行われないので、

docker-compose build --no-cache

で、一度再作成するといいと思います。
この後に、db:create を試すといかがでしょうか。


上記でもうまくいかない場合は、コンテナの中に入ってみるといいかもしれません。

docker-compose run --rm web bash

上記でコンテナの中に入れると思います。
入ったら、ls -la や pwd コマンドで、想定のディレクトリにいるか、想定のファイルがあるか、config/database.yml があるかを確認してみてください。

投稿2019/10/19 10:18

編集2019/10/20 01:11
suama

総合スコア1997

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

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

Arly3

2019/10/19 13:09

ご指摘ありがとうございます。確かに揃っていなかったですね。 Dockerfileもdocker-compose.ymlもmy-appに統一しdocker-compose buildからやり直してみましたが、残念ながら同様のエラーが発生しました... 変更した点は記事に反映しますので合わせてご確認ください。
suama

2019/10/20 00:50

はい!改めて拝見します!
suama

2019/10/20 01:13 編集

追記してみました。
Arly3

2019/10/20 06:02 編集

ご協力ありがとうございました。db:createに関しては解決しました。 suamaさんの指示通り/my-appに統一し一連の動作を行なった際は同様のエラーが発生したのですが、改めてdatabase.ymlを見てみると development: 以下の文が書かれていませんでした。おそらく色々試す過程で謝って消してしまったのだと思います。 根本的な原因は/my-appに統一していなかったことにあると思われます。 丁寧な指示をしていただいてありがとうございました。
suama

2019/10/20 07:22

よかったですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問