はじめに
RUNTEQ内でチーム開発をしているのですが、みんな大好き環境構築は最初の難関でございます。
特にデータベースでハマったことがない人はいないんではないでしょうか。
そんなきっかけで、database.ymlの設定について、自分の理解の振り返りも兼ねて書いておきます。
database.yml.default
って何?
チーム開発ではよくあるのですが、database.yml.default
は実際に使うファイルではありません。
あくまで初期設定ファイルとして置いてあるだけで、実際は各開発者がこれをコピーしてローカル開発用に編集します。
$ cp config/database.yml.default config/database.yml
そういうわけでdatabase.yml
は共有しないので、gitignoreされています。
database.yml
って何?
Railsでデータベースに接続するときは、このdatabase.ymlを見に行きます。
じゃあdatabase.ymlは何なのかというと、データベースとの接続情報をコード化しているだけです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
default : &default
adapter : mysql2
encoding : utf8mb4
charset : utf8mb4
collation : utf8mb4_bin
pool : <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username : root
password :
socket : /tmp/mysql.sock
development :
<< : *default
database : hoge_development
test :
<< : *default
database : hoge_test
production :
<< : *default
database : hoge_production
username : hoge
password : <%= ENV['HOGE_DATABASE_PASSWORD'] %>
例えば、MySQLではデータベースに接続するためのオプションとして、以下のようなものがあります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ mysql --help
# 一部抜粋
Usage: mysql [ OPTIONS] [ database]
-?, --help Display this help and exit.
-h, --host= name Connect to host.
-p, --password[= name]
Password to use when connecting to server. If password is
not given it' s asked from the tty.
-P, --port= # Port number to use for connection or 0 for default to, in
order of preference, my.cnf, $MYSQL_TCP_PORT ,
/etc/services, built-in default ( 3306) .
-S, --socket= name The socket file to use for connection.
-t, --table Output in table format.
-u, --user= name User for login if not current user.
-V, --version Output version information and exit.
上記のdatabase.yml
のコードはmysql -u root -S /tmp/mysql.sock -t hoge_development
と同じ意味です。
-p も –password も指定しない場合は、パスワードは送信されません。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.2 MySQL サーバーへの接続
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ mysql - u root - S / tmp / mysql . sock - t hoge_development
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with - A
Welcome to the MySQL monitor . Commands end with ; or \ g .
Your MySQL connection id is 114
Server version : 5 . 7 . 32 Homebrew
Copyright ( c ) 2000 , 2020 , Oracle and / or its affiliates . All rights reserved .
Oracle is a registered trademark of Oracle Corporation and / or its
affiliates . Other names may be trademarks of their respective
owners .
Type 'help;' or '\h' for help . Type '\c' to clear the current input statement .
mysql > select * from users ;
+ ----+-------------+---------------------+----------------------------+----------------------------+
| id | name | email | created_at | updated_at |
+ ----+-------------+---------------------+----------------------------+----------------------------+
| 14 | hoge | test @ example . com | 2021 - 04 - 11 21 : 12 : 07 . 798476 | 2021 - 04 - 11 21 : 12 : 07 . 798476 |
| 16 | aiandrox | aiandrox7 @ gmail . com | 2021 - 04 - 29 18 : 43 : 07 . 895733 | 2021 - 04 - 29 18 : 43 : 07 . 895733 |
+ ----+-------------+---------------------+----------------------------+----------------------------+
2 rows in set ( 0 . 01 sec )
他には、デフォルト値で-h localhost -P 3306
があります。
(特に何もいじっていない場合。実際のデフォルト値はmy.confを参照)
基礎MySQL ~その2~ my.cnf (設定ファイル) - Qiita
なので、rails db:create
などのコマンドで接続ができないという場合は、ローカルのデータベース接続設定とdatabase.ymlの値を合わせる必要があります。
まずはmysql
コマンドでデータベースに接続することを目指しましょう。
その他
この前提は、本番環境にデプロイするときのdatabase.yml
の設定をするときにも参考になります。
また、Sequel Proなどのツールを用いてデータベースに接続するときも同じような感じです。