@fukutechの技術ブログ

要点

まずMac へ MySQL を Homebrew でインストールする手順を参考に下記1〜3を実施した。

1. MySQLのインストール

 # インストール  
 $ brew update  
 $ brew install mysql  

 # インストールできたかの確認  
 $ brew info mysql

2. 起動・接続

 # MySQLの起動  
 $ mysql.server start  

 # MySQLへの接続(quitまたはexitで脱出可能)  
 $ mysql -uroot

3. セキュリティ設定(rootのパスワード変更等)

 # セキュリティ設定(基本的に全てYesとして設定を進める)  
 $ mysql_secure_installation  
   - 1.rootユーザのパスワード設定  
   - 2.anonymousユーザの削除  
   - 3.rootユーザがリモートサーバからログインできないようにする  
   - 4.テスト用のデータベースと接続どうかの確認を削除

次にRailsのDBを(初めから| |後から)MySQLに変更するを参考にしてMySQLユーザーの作成を行った。
(rootアカウントで作業するのは抵抗があるため)

4. 再度MySQLへ接続、MySQLユーザーの作成

 $ mysql -uroot -p  
 Enter password:  
 Welcome to the MySQL monitor.  Commands end with ; or \g.  
 Your MySQL connection id is 12  
 Server version: 8.0.13 Homebrew  

 Copyright (c) 2000, 2018, 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> create user 'test-user'@'localhost' identified by 'password-example';  
 Query OK, 0 rows affected (0.06 sec)  

 # 確認方法  
 mysql> select User,Host from mysql.user;  
 +------------------+-----------+  
 | User             | Host      |  
 +------------------+-----------+  
 | test-user          | localhost |  
 | mysql.infoschema | localhost |  
 | mysql.session    | localhost |  
 | mysql.sys        | localhost |  
 | root             | localhost |  
 +------------------+-----------+  
 5 rows in set (0.00 sec)  

 # 権限の設定  
 mysql> grant all on *.* to 'masashi'@'localhost';  
 Query OK, 0 rows affected (0.06 sec)  

 # quitで脱出  
 mysql> quit

5. railsアプリの作成

以下を参考にしながらデフォルトがMySQLの設定になったrailsアプリの作成を行った。

 # 以下の2つのいずれかを用いればconfig/database.ymlがMySQLの設定になった状態でスタートできる  
 $ rails new アプリケーション名 -d mysql  
 $ rails new アプリケーション名 --database=mysql

config/database.ymlを確認すると以下のようになっている。

# config/database.yml  
  default: &default  
   adapter: mysql2  
   encoding: utf8  
   pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>  
   username: root  
   password:  
   host: localhost  

 development:  
   <<: *default  
   database: アプリケーション名_development  

 test:  
   <<: *default  
   database: アプリケーション名_test  

 production:  
   <<: *default  
   database: アプリケーション名_production  
   username: アプリケーション名  
   password: <%= ENV['アプリケーション名_DATABASE_PASSWORD'] %>

6. railsアプリからのMySQLへの接続

上記のdatabase.ymlにパスワード等を入れれば使えるようになるが、パスワードを晒すのは嫌なので環境変数として管理したいと思い、MySQLの環境変数の設定方法について調査すると、dotenv gemでできることが分かった。
(参考:RailsのDatabaseをsqlite3からMySQLにして、パスワードをdotenvで定数化する

# Gemfile  
 gem mysql2  
 gem dotenv-rails

bundle installすれば、以下のような形でパスワードを晒さなくてよくなる

# config/database.yml  
 development:  
   adapter: mysql2  
   encoding: utf8  
   database: <%= ENV['DATABASE_DEV_NAME'] %>  
   pool: 5  
   username: <%= ENV['DATABASE_DEV_USER'] %>  
   password: <%= ENV['DATABASE_DEV_PASSWORD'] %>  
   host: <%= ENV['DATABASE_DEV_HOST'] %>

touch .envでアプリケーションのルートディレクトリに.envファイルを追加してそのファイルに以下のように記述することでrailsアプリからMySQLと接続可能になる。
また、.gitignore.envを追加してローカルに留めることで自分の手元だけで安全に管理可能となる。

# .env  
 DATABASE_DEV_PASSWORD = '設定したパスワードを記入'  
 DATABASE_DEV_USER = '作成したMySQLユーザー名を記入'  
 DATABASE_DEV_HOST = 'localhostとか'

最後に、$ rails db:createでDB作成して成功すればMySQLの導入は完了!

このログへのコメント

コメントはありません