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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails

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

Docker

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

Q&A

解決済

1回答

3928閲覧

【Docker】rails db:migrateを実行するとエラーがでてしまう

_chii

総合スコア50

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2020/10/09 06:04

編集2020/10/09 07:31

環境

macOS 10.15.5
Rails 5.2.4.2
Docker 19.03.12

前提・実現したいこと

rails db:migrateを実行したときに正常に動作して欲しい。
その前のモデルの作成は成功しています。

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

rails g model ...でモデルを作成後にrails db:migrateを実行すると

$ rails db:migrate rails aborted! PG::ConnectionBad: could not translate host name "db" to address: nodename nor servname provided, or not known bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace)

とエラーになってしまいました。

試したこと

postgresコンテナに環境変数POSTGRES_PASSWORDを設定し、datebase.ymlにもpasswordを設定しました。

docker-compose.yml

version: '3' services: db: image: postgres volumes: - ./tmp/db:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: 'postgres' web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/myapp ports: - "3000:3000" depends_on: - db

datebase.yml

default: &default adapter: postgresql encoding: unicode host: localhost username: postgres password: postgres pool: 5 development: <<: *default database: myapp_development test: <<: *default database: myapp_test

しかし変わらず...。
もし解決方法が分かる方がいらっしゃいましたらぜひご教授をお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

追記

config/database.ymlhost に localhost を指定しているのに
db に向かって接続を試行しようとしていることから推測すると、
最新の Rails プロジェクトのコードをバインドマウントせずに
前回ビルドした時点での config/database.yml の内容で
rails db:migrate コマンドを実行しているものと思われます

元の回答の修正内容を適用した上で、
最新の Rails プロジェクトの config/database.yml を反映した状態で実行するために、
ホスト側で次のようにコマンドを実行してマイグレーションを行います:

console

1docker-compose run --rm web rails db:migrate

このように実行することで、docker-compose.yml で定義されている
バインドマウントの設定が有効になります:

yaml

1 volumes: 2 - .:/myapp

これによって、
ホスト側の config/database.yml を含む最新の Rails プロジェクトを使って
web サービスのコンテナーが起動できます

元の回答

config/database.yml の次の箇所を修正します:

diff

1default: &default 2 adapter: postgresql 3 encoding: unicode 4- host: localhost 5+ host: db 6 username: postgres 7 password: postgres 8 pool: 5 9 10development: 11 <<: *default 12 database: myapp_development 13 14test: 15 <<: *default 16 database: myapp_test

ただし、コマンド rails db:migrateweb サービスのコンテナーで実行していることが前提です

投稿2020/10/09 07:55

編集2020/10/09 08:43
y_shinoda

総合スコア3272

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

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

_chii

2020/10/09 08:04

ご回答ありがとうございます。 エラーの内容は変わりませんでした...インターネットの情報の中で内容に近いものを試してもエラーの内容が変わらずということばかりなので検証する方法をもし指南して頂くことができましたらお願いしたく存じます。
y_shinoda

2020/10/09 08:24

失礼しました、回答を修正しました 検証は、僕の回答を試していただけたので、それが検証になりました 原因についての詳細が気になる場合は、 rails db:migrate を実行するまでに行った コンテナーの起動、コンテナーへのターミナルの接続に使ったコマンドを提示していただけると、 僕が原因について分かる範囲でお答えいたします
_chii

2020/10/09 09:19

大変的確なご回答ありがとうございました。無事に解決することができrails db:migrateを実行することができました^_^
_chii

2020/10/09 09:36

すみません...なぜかまた同じエラーになってしまいました...。 実行結果がうまくいったのでブラウザを更新したらエラーがでてしまい先ほどまでできていたConsoleも全く使えなくなってしまいました...
_chii

2020/10/09 09:37

何かしたことといえばdockerを一度閉じてまた開いたことでしょうか?
y_shinoda

2020/10/09 09:56

新たに質問を立て直し、その質問欄で現在の状況を説明いただいた方が良いと思います このコメント欄では状況確認のやりとりに限界があるためです 新たに質問を作成する際に、次のことを記載お願いします: - 「同じエラー」はどのような操作をしたときに発生するか - 「ブラウザーを更新した」ときに表示されたエラー - 「先ほどまでできていたConsole」が示す具体的なツールと操作 - 「docker を一度閉じてまた開いた」ときの具体的な操作 - ホスト側で docker-compose ps -a と docker ps -a を実行したときの表示内容 また、新たに質問を投稿すると次のようなメリットがあります: - 質問者も回答者も新たにポイントを取得できます - すべての回答者が質問を確認し、回答が得られる確率が上がります - 検索でこの質問にたどり着いた人が質問のタイトルに対するシンプルな回答を得ることができ、質問に高評価が得られやすくなります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問