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

回答編集履歴

2

Fix expression

2020/08/14 15:26

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -24,6 +24,19 @@
24
24
  DATABASE_HOST=db
25
25
  ```
26
26
 
27
+ database.yml は `password` を `MYSQL_ROOT_PASSWORD` から `MYSQL_PASSWORD` に変更します:
28
+
29
+ ```yaml
30
+ default: &default
31
+ adapter: mysql2
32
+ encoding: utf8
33
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
34
+ username: <%= ENV.fetch('MYSQL_USER') { 'root' } %>
35
+ password: <%= ENV.fetch('MYSQL_PASSWORD') { 'db_root_password' } %>
36
+ host: <%= ENV.fetch('DATABASE_HOST') { 'db' } %>
37
+ port: <%= ENV.fetch('DATABASE_PORT') { 3306 } %>
38
+ ```
39
+
27
40
  ### nginx.conf のディレクトリー設定
28
41
 
29
42
  ディレクトリーを記事の設定から変更されているので、

1

Add expression

2020/08/14 15:26

投稿

y_shinoda
y_shinoda

スコア3272

answer CHANGED
@@ -1,3 +1,70 @@
1
+ ## 追記
2
+
3
+ 次の記事を参照している前提で回答します
4
+ [Docker + Rails + Puma + Nginx + MySQL - Qiita](https://qiita.com/eighty8/items/0288ab9c127ddb683315)
5
+
6
+ ### MYSQL_USER には root 以外を設定
7
+
8
+ `MYSQL_USER` には root を設定することはできません:
9
+
10
+ ```console
11
+ db_1 | 2020-08-14 09:42:31+00:00 [Note] [Entrypoint]: Creating user root
12
+ db_1 | ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
13
+ db_1 |
14
+ test-docker-compose_db_1 exited with code 1
15
+ ```
16
+
17
+ root でも良いですが、データベースの標準的な利用法に則って
18
+ アプリケーションがアクセスするための一般ユーザーを作成しましょう:
19
+
20
+ ```ini
21
+ MYSQL_ROOT_PASSWORD=db_root_password
22
+ MYSQL_USER=app
23
+ MYSQL_PASSWORD=password
24
+ DATABASE_HOST=db
25
+ ```
26
+
27
+ ### nginx.conf のディレクトリー設定
28
+
29
+ ディレクトリーを記事の設定から変更されているので、
30
+ 次の 2 箇所の変更も必要になります:
31
+
32
+ ```diff
33
+ # ソケット通信したいのでpuma.sockを指定
34
+ - server unix:///webapp/tmp/sockets/puma.sock;
35
+ + server unix:///my_app/tmp/sockets/puma.sock;
36
+
37
+ # ドキュメントルートの指定
38
+ - root /webapp/public;
39
+ + root /my_app/public;
40
+ ```
41
+
42
+ ### データベースの作成
43
+
44
+ 記事ではコマンドで作成する手順となっています:
45
+
46
+ [DBの作成 | Docker + Rails + Puma + Nginx + MySQL - Qiita](https://qiita.com/eighty8/items/0288ab9c127ddb683315#db%E3%81%AE%E4%BD%9C%E6%88%90)
47
+
48
+ ```console
49
+ $ docker-compose exec app rails db:create
50
+ ```
51
+
52
+ しかし、これは MySQL 公式イメージの正しい使い方ではありません
53
+ MySQL 公式イメージでは環境変数 `MYSQL_DATABASE` でデータベース名を指定することで
54
+ コンテナー起動時に自動的にデータベースを作成します:
55
+
56
+ ```ini
57
+ MYSQL_ROOT_PASSWORD=db_root_password
58
+ MYSQL_USER=app
59
+ MYSQL_PASSWORD=password
60
+ DATABASE_HOST=db
61
+ MYSQL_DATABASE=my_app_development
62
+ ```
63
+
64
+ 参考: [mysql - Docker Hub](https://hub.docker.com/_/mysql)
65
+
66
+ ## 元の回答
67
+
1
68
  ぱっと見問題なさそうに見えますね
2
69
  次の点について確認してみるとどうでしょうか?
3
70
 
@@ -5,4 +72,4 @@
5
72
  `docker-compose ps` を実行したとき、 `my_app_db_1` は exit していませんか?
6
73
 
7
74
  2
8
- `docker-compose logs` を実行すると、特に `my_app_db_1` について、どのようなログが表示されますか?
75
+ `docker-compose logs` を実行すると、特に `my_app_db_1` について、どのようなログが表示されますか?db.env