【環境構築】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
も成功。
エラー対処で参考にしたもの
【MySQL, Rails】「Gem::Ext::BuildError: ERROR: Failed to build gem native extension.」の対処 - Qiita
Cannot install mysql2 gem for Rails project - Stack Overflow