teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

Add second answer

2020/09/04 11:44

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -1,5 +1,64 @@
1
- ## エラーメッセージについて
1
+ ## 追記
2
2
 
3
+ ### アプリケーションの配置について
4
+
5
+ Dockerfile では `WORKDIR` は /Books になっているので
6
+ docker-compose.yml でもホスト側ボリュームのバインドマウントする位置は
7
+ /Books に統一する必要があります
8
+
9
+ docker-compose.yml:
10
+
11
+ ```diff
12
+ volumes:
13
+ - - .:/app_name
14
+ + - .:/Books
15
+ ```
16
+
17
+ アプリケーションを配置する位置は `WORKDIR` で設定したパスに統一する必要があります
18
+ コンテナーを起動したときのコマンドは `WORKDIR` で実行されるためです
19
+
20
+ これがずれているため、ホスト側のコードを更新しても
21
+ コンテナーを起動したときに実行されるコードは
22
+ Docker イメージをビルドした時点の過去のコードとなります
23
+ Dockerfile の `ADD` 命令でコンテナーの `WORKDIR` にコードを配置しているためです
24
+
25
+ Compose ファイルで `WORKDIR` にホストのコードをバインドマウントすれば
26
+ コンテナー起動時に実行されるコードは、ホスト側の現在のコードとなります
27
+
28
+ ### データベースのパスワード
29
+
30
+ docker-compose.yml で `MYSQL_ROOT_PASSWORD: example` と指定しているので、
31
+ 接続用のパスワードも合わせる必要があります
32
+
33
+ config/database.yml:
34
+
35
+ ```diff
36
+ - password: password
37
+ + password: example
38
+ ```
39
+
40
+ ### テーブルの作成
41
+
42
+ `docker-compose up` でコンテナーを起動したら、
43
+ 別のターミナルを開き、次のコマンドを実行します:
44
+
45
+ ```console
46
+ docker-compose run --rm web rails db:create
47
+ ```
48
+
49
+ この設定を行わずに docker-compose up を実行しても、ブラウザーでアクセスすると次のようなエラーが表示されます:
50
+
51
+ ```html
52
+ ActiveRecord::NoDatabaseError
53
+ FATAL: database "myapp_development" does not exist
54
+ ```
55
+
56
+ 参考: [db サービスに Rails アプリケーションが利用するデータベースを新規作成 | Docker 公式ドキュメントの Rails Quickstart 完全解説 - Qiita](https://qiita.com/y_shinoda/items/1d02d3c63e003e6c7ea2#db-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB-rails-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90)
57
+
58
+ ## 元の回答
59
+
60
+ ### エラーメッセージについて
61
+
3
62
  `config/database.yml` の `host` の設定が `localhost` になっている可能性があります
4
63
  `host` は `db` に設定する必要があります
5
64
 
@@ -21,7 +80,7 @@
21
80
  database: 自分のDBの名前
22
81
  ```
23
82
 
24
- ## socket について
83
+ ### socket について
25
84
 
26
85
  特別な理由がなければ `congit/database.yml` に `socket` の設定は必要ありません
27
86
  `/tmp/mysql.sock` はローカルに MySQL が起動しているときの接続用ソケットです
@@ -30,12 +89,12 @@
30
89
 
31
90
  参考: [MySQL - mysql.sockって何?|teratail](https://teratail.com/questions/121735#reply-186222)
32
91
 
33
- ## MySQL のサービスについて
92
+ ### MySQL のサービスについて
34
93
 
35
94
  MySQL のサービスは Docker Compose によって `db` サービスのコンテナーとして起動します
36
95
  HomeBrew で Mac 上に MySQL をインストール・起動させる必要はありません
37
96
 
38
- ##
97
+ ###
39
98
 
40
99
  うまく動作しない場合は必ず自身のコードを質問欄に記載するようにします:
41
100
 

2

Add reference

2020/09/04 11:44

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -28,6 +28,8 @@
28
28
  リモートの MySQL に接続するときは `socket` の設定がなくても
29
29
  mysql2 アダプターが自動的にリモートに接続します
30
30
 
31
+ 参考: [MySQL - mysql.sockって何?|teratail](https://teratail.com/questions/121735#reply-186222)
32
+
31
33
  ## MySQL のサービスについて
32
34
 
33
35
  MySQL のサービスは Docker Compose によって `db` サービスのコンテナーとして起動します

1

Add expression

2020/09/04 06:16

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -21,6 +21,13 @@
21
21
  database: 自分のDBの名前
22
22
  ```
23
23
 
24
+ ## socket について
25
+
26
+ 特別な理由がなければ `congit/database.yml` に `socket` の設定は必要ありません
27
+ `/tmp/mysql.sock` はローカルに MySQL が起動しているときの接続用ソケットです
28
+ リモートの MySQL に接続するときは `socket` の設定がなくても
29
+ mysql2 アダプターが自動的にリモートに接続します
30
+
24
31
  ## MySQL のサービスについて
25
32
 
26
33
  MySQL のサービスは Docker Compose によって `db` サービスのコンテナーとして起動します