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

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

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

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

Ruby on Rails 5

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

Docker

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

Q&A

1回答

1650閲覧

docker-composeでのエラー

DaigoIkeda

総合スコア0

docker-compose

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

Ruby on Rails 5

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

Docker

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

1グッド

1クリップ

投稿2021/09/24 11:51

dockerを用いてrspecの勉強を行なっているものです。

docker-compose upまでは現状できています。
その前にrails db:create , db:migrateを実行しています。
docker-compose up -dを実行した状態で、rspecを走らせた時にエラーになりました。

Failure/Error: ActiveRecord::Migration.maintain_test_schema! Mysql2::Error: Unknown MySQL server host 'db' (0)

調べた限りでは、databese.ymlとdocker-compose.ymlのhost名とサーバー名が違ったりしたらこんなエラーがでたりするみたいですが、見た感じどこが間違っているかわかりませんでした。

database: db/production.sqlite3 default: &default adapter: mysql2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 username: root password: password host: db development: <<: *default database: development_database # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: <<: *default database: test_database production: <<: *default database: production_database
version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: password ports: - '3306:3306' volumes: - mysql_data:/var/lib/mysql web: build: . ports: - "3000:3000" command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp - bundle:/usr/local/bundle depends_on: - db volumes: bundle: mysql_data:

解決策を見つけることができませんでした。
申し訳ないですが、回答していただけると幸いです。
よろしくお願いします。

shinoharat👍を押しています

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

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

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

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

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

shinoharat

2021/09/24 12:38

エラーとは直接関係ないと思いますが、 database: db/production.sqlite3 の行は不要です。
DaigoIkeda

2021/09/24 12:45

そうなんですね。 了解です。
guest

回答1

0

下記のどちらかで解決するような予感がします。

(1) rspecをdocker上で実行する

bash

1docker-compose exec web bundle exec rspec

(2) test用のmigrateを実行してから、(1)を実行

bash

1docker-compose exec web bundle exec rake db:migrate RAILS_ENV=test

【追記】 9/25

ローカルとdockerで2つのrubyが存在するようですね。
まずはローカルで動作確認してみましょう。

databese.yml を下記のように修正します。

yaml

1default: &default 2 adapter: mysql2 3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 4 timeout: 5000 5 username: root 6 password: password 7 host: 127.0.0.1 8# host: localhost 9 10development: 11 <<: *default 12 database: development_database 13 14# Warning: The database defined as "test" will be erased and 15# re-generated from your development database when you run "rake". 16# Do not set this db to the same as development or production. 17test: 18 <<: *default 19 database: test_database 20 21production: 22 <<: *default 23 database: production_database

ローカルで、rspecを実行して動作しますでしょうか?

【ここから先、小咄なのでテキトウに聞いてください】
現実世界(macOS)とどっかの仮想世界(docker内のlinux)の2つの世界のよく似たrubyさんがいらっしゃるようで、
DaigoIkedaさんは、その2人を同一人物として命令されているようです。
この2人はよく似てますが別人なので、住む世界(OS)も年齢(version)も持っているスキル(gem list)も違います。

現実世界のrubyさんの年齢とスキルを調べる

sh

1ruby -v 2gem list

仮想世界のrubyさんの年齢とスキルを調べる

sh

1docker-compose exec web ruby -v 2docker-compose exec web gem list

また、mysqlさんは、仮想世界の住人ですが、現実世界でも会話できるよう回線を引いています。
仮想世界では、db:3306 で通話できますが、現実世界では、localhost:3306で通話します。

ですので、どちらか片方にだけ命令すると決めるといいかもしれません。

それと厄介なことに、Dockerfileを確認したところ仮想世界のrubyさんのスキルは、Gemfileを更新してもdocker-compose buildしないと更新されない構成になっています。

個人的には、DBはdockerで起動し、APP(rails)はローカルのRVMを使って開発したほうがいいです。
macユーザは特になのですが、docker for macで頻繁に変更されるディレクトリをマウントすると死ぬほど遅く、猛烈なストレスで開発どころじゃなくなります。
docker-syncを使うと速度的には改善されますが、スリープすると同期されなくなることがあったり、どうでもいい気苦労をしなければならなくなります。

参考)
https://qiita.com/pocari/items/0340049742927f3a94b7

投稿2021/09/24 14:00

編集2021/09/25 14:34
mj29

総合スコア136

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

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

DaigoIkeda

2021/09/24 14:11

回答ありがとうございます! (1)(2)どちらとも実行しました結果 ``` An error occurred while loading ./spec/controllers/tasks_controller_spec.rb. Failure/Error: include_context "project setup" ArgumentError: Could not find shared context "project setup" # ./spec/controllers/tasks_controller_spec.rb:4:in `block in <top (required)>' # ./spec/controllers/tasks_controller_spec.rb:3:in `<top (required)>' ```
mj29

2021/09/24 14:58

> docker-compose up -dを実行した状態で、rspecを走らせた時にエラーになりました。 OSってMacですか Windowsですか? この時は、ターミナルでrspecを実行されたと思うのですが、その時のコマンド(プロンプトも含めて)を教えていただけますでしょうか?(名前等は伏せ字にしていただいて構いません) 例) taro@MacBook-Pro sample_rails_app % rspec それから、本文にDockerfileを追記してもらえると解決に近づけるかもです。
DaigoIkeda

2021/09/24 22:53

Macです。 以下rspec実行時のターミナルです。 ``` ➜ everydayrails-rspec-2017 git:(master) ✗ rspec 2021-09-25 07:50:51 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead. /Users/taro/.rvm/gems/ruby-2.6.5/bundler/gems/shoulda-matchers-4b160bd19ecc/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb:273: warning: BigDecimal.new is deprecated; use BigDecimal() method instead. An error occurred while loading ./spec/controllers/home_controller_spec.rb. Failure/Error: ActiveRecord::Migration.maintain_test_schema! Mysql2::Error: Unknown MySQL server host 'db' (0) # /Users/taro/.rvm/gems/ruby-2.6.5/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `connect' # /Users/taro/.rvm/gems/ruby-2.6.5/gems/mysql2-0.4.10/lib/mysql2/client.rb:89:in `initialize' ``` dockerfileです ``` FROM ruby:2.6 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y \ build-essential \ nodejs \ && rm -rf /var/lib/apt/lists/* RUN gem install bundler:2 WORKDIR /tmp ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install ENV APP_HOME /myapp RUN mkdir -p $APP_HOME WORKDIR $APP_HOME ADD . $APP_HOME ```
mj29

2021/09/25 01:57

回答のコメントだとマークダウンが使えないので、回答欄に追記しました。
DaigoIkeda

2021/09/25 02:17

現実世界の話で、dockerのイメージが少しだけはっきりしました。 dbをlocalhostに変えてみた結果ですが、 Failure/Error: ActiveRecord::Migration.maintain_test_schema! Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
DaigoIkeda

2021/09/25 04:34

ありがとうございます。修正いたしました。 また以下のエラーになりました。 これはもう作り直した方が良さそうですか An error occurred while loading ./spec/models/user_spec.rb. Failure/Error: ActiveRecord::Migration.maintain_test_schema! Mysql2::Error: Access denied for user 'root'@'localhost' (using password: YES)
mj29

2021/09/25 04:44

dbだけ作り直してみましょうか。 rake db:reset
DaigoIkeda

2021/09/25 05:21

リセットをしてみました。 似たようなエラーが出てしまいました ➜ everydayrails-rspec-2017 git:(master) ✗ rake db:reset rake aborted! Mysql2::Error: Access denied for user 'root'@'localhost' (using password: YES)
mj29

2021/09/25 06:23

一度下記を実行して、mysql を初期化してみましょうか docker-compose down docker volume ls "なんとか_mysql_data" というのがあるはずです。 docker volume rm なんとか_mysql_data docker-compose up -d 初期化が終わったら一旦mysql コマンドでログインできるか確認してみましょう。 mysql -h 127.0.0.1 -P 3306 -uroot -p Enter password: passwordと入力 できたら、下記コマンドでDBが空っぽになっているか一応確認。 mysql> show databases; mysql> quit でぬけて、DBを作成 rake db:create:all rake db:migrate rake db:migrate RAILS_ENV=test 途中でエラーが出たらごめんなさい。。
DaigoIkeda

2021/09/25 07:18

すいません確認なのですが、dbの初期化について この表記がでたのですが、これは初期化できてませんでしょうか? mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.02 sec)
mj29

2021/09/25 07:44

あっ、初期状態で存在するデータベースなので、先進めてください!
DaigoIkeda

2021/09/25 07:51

了解です! そそまま進めたところ、こうなりました、すいません。 ➜ everydayrails-rspec-2017 git:(master) ✗ rake db:create:all Access denied for user 'root'@'localhost' (using password: YES) Couldn't create 'development_database' database. Please check your configuration. rake aborted! Mysql2::Error: Access denied for user 'root'@'localhost' (using password: YES)
mj29

2021/09/25 08:13

database.ymlを host: localhost から host: 127.0.0.1 へは修正ずみですよね?
DaigoIkeda

2021/09/25 08:54

localhostは指定していません!
mj29

2021/09/25 09:26

ちょっとこちらで試してみますので、気長にお待ちくださいmm
DaigoIkeda

2021/09/25 09:50

すいません。よろしくお願いします。
mj29

2021/09/25 14:44

試したところ私の環境ではうまく行きました。 もしかしたら微妙にdatabase.ymlが異なっているかもしれません。 回答を修正して全文を載せておきましたので、コピペしてから下記を実行していただけますでしょうか? docker-compose down --volumes --remove-orphans docker-compose up -d rake db:create:all rake db:migrate rake db:migrate RAILS_ENV=test rspec
DaigoIkeda

2021/09/27 01:13

mj29さんありがとうございました!! 無事テストを実行することができました。
mj29

2021/09/27 01:52

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問