Programming Journal

学習したことの整理用です。

【環境構築】rails new ~ MySQLの初期設定

rails new

そもそも、railsコマンドを使ったら、command not foundのエラーが出たので、gem install rails install実行してインストール。

rails new オプションいろいろ

rails newコマンドを実行するにあたり、オプションを指定しておきます。

~/workspace/カレントディレクトリ *ブランチ名
❯  rails _6.0.3.4_ new . -B -d mysql --skip-test  
  • アプリケーションに先行してREADMEを作っていたため、カレントディレクトリにアプリケーションを作成したいです。
    .でカレントディレクトリに雛形ファイルを作成できます。
  • -Bオプションで、bundle installをスキップしました。
  • -dオプションで、使用するデータベースをmysqlに指定しています。
  • --skip-testオプションで、テストの生成をパスしています。

railsコマンド(rails) | Railsドキュメント

必要なgemを追記して、bundle installします。

MySQLの設定

こっちが詰まりに詰まり、苦しかったです。一日苦しみました。

MySQLをアンインストール

私はもともとMySQLをインストールしていたようですが、パスワード等をなくしてしまったので一度アンインストールしました。
関連ファイルまで全て削除しないとアンインストールできませんでした。
macOSにHomebrewでインストールしたMySQL5.7, MySQL8.0をアンインストールする方法 | プログラミング入門ナビ

再インストール

ローカルの環境にインストールしていきます。 基本的に、環境構築はプロゲートがわかりやすいです。
MySQLの開発環境を用意しよう(macOS) | プログラミングの入門なら基礎から学べるProgate[プロゲート]

Rails側の設定

ローカルでMySQLのログインまで終わったら、Rails側の設定をします。
config/detabase.ymlでDBの設定をします。

rails newするときにMySQLを指定していたので、自動でファイルが出来上がっています。
passwordは入力する必要があるのですが、Githubにpushしたくないので、環境変数を設定し、そこからパスワードを読み込む設定にします。

環境変数設定

gem 'dotenv'を導入しました。

GitHub - bkeepers/dotenv: A Ruby gem to load environment variables from `.env`.
【Ruby on Rails】GitHubに公開したくない変数や値を隠してpushする方法 - Qiita

DATABASE_DEV_PASSWORD = '設定したパスワード'
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: <%= ENV['DATABASE_DEV_PASSWORD'] %> # 追加
  host: localhost
略

Githubにpushしないように、gitignoreに追加します。

/.env

DB生成エラー

MySQLの初期設定が終わったので、DBを生成していきます。

エラー発生…

❯ bundle exec rails db:create
rails aborted!
LoadError: dlopen(/Users/ユーザー名/workspace/アプリ名/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
  Referenced from: /Users/ユーザー名/workspace/アプリ名/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/ユーザー名/workspace/アプリ名/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle

LoadError読み込めてない…?

もしかしたら、gem 'mysql2がインストール失敗している…?

❯ bundle doctor  
The following gems are missing OS dependencies:
 * mysql2: /usr/local/opt/mysql-client/lib/libcrypto.1.1.dylib
 * mysql2: /usr/local/opt/mysql-client/lib/libssl.1.1.dylib
 * mysql2: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib

対処

# アンインストールしてから
❯ bundle exec gem uninstall mysql2

# 再インストール
❯ bundle install

そしたら今度はインストール中にエラー…

open-sslライブラリのパスを通す必要があるよう。

❯ export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

このコマンドを実行後、bundle installしたらうまくいきました。

その後、rails db:create rails db:migrate rails serverも成功。

f:id:Study-Diary:20201202162710p:plain
Yay!

エラー対処で参考にしたもの

MySQL起動エラーの対処の仕方【Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)】 - Qiita

【MySQL, Rails】「Gem::Ext::BuildError: ERROR: Failed to build gem native extension.」の対処 - Qiita

Cannot install mysql2 gem for Rails project - Stack Overflow