【ruby on rails】bundle configの設定とbundle installエラー
こんにちは
以前、rails6+mySQL2のインストールに失敗した件を記載しました。
(https://mocomo012.hatenablog.com/entry/2020/03/18/073205)
今回、rails5+docker環境構築の際にまたmySQL2のインストール(あとその前にnokogiriインストール)に失敗してbundle configを触ってインストールはできたので備忘録です。
-----
○ruby2.7.0
○raills2.5.3
○docker-compose1.25.2
○mySQL2 0.5.3 (→mySQL5.7)
-----
※mySQL2でのdocker環境構築は未解決です。→追記で解決
(結局mysqlでdocker環境構築しました)
bundlerは以下の優先順位で適用されるようです。
・ローカルのアプリケーション(app/.bundle/config)
・環境変数
・ユーザのホームディレクトリ(~/.bundle/config)
設定内容の確認
$ bundle config
※一度オプション付きでbundle installを実行するとその設定がbundle configに残ります。local(app/.bundle/config)に対する設定とglobal(~/.bundle/config)に対する設定を変えれます。
設定削除
$bundle config --delete 【build.gem名】
bundlerの構成オプションの設定(Bundler 1.7)
http://ruby.studio-kingdom.com/bundler/bundle_config/
下記のサイトさまが詳しいです。
https://qiita.com/thunders/items/101c6b329830fb1fb27d
オプション付きで実行
$gem install nokogiri -- --use-system-libraries
bundle configに追加され、次回以降はこの設定が適用されるようです。
①以前の記事参考
※こちらのサイトさまによると、LDFLAGSの設定はいらず、CPPFLAGSの設定だけでいいようです。
https://310nae.com/error-mysql2/
※CPPFLAGSは$brew info opensslで確認(以下は私の環境の場合)
$ bundle config --local build.mysql2 "--with-CPPFLAGS=-I/usr/local/opt/openssl@1.1/include"
$bundle install
→エラーでた(ld: library not found for -limported_openssl)
※設定消すときは $bundle config --delete build.mysql2
②(①でダメだった場合)
limported_opensslの意味が全然わからなかったが、上記でダメだった方のサイトを参考にダメもとで
→$bundle install できた!
mySQL2がインストールできてよかった!
で終わりでなく問題はここからでした。
今回、docker環境でrailsアプリを作成しています。
※doker環境構築結果→ここからは未解決のためmySQLでrailsアプリを作り直しました。
とにかくdocker環境作りたいだけの方は最初からmysqlでアプリを作ることをお勧めします。。
docker環境でmySQL2をインストールしましたが、
DB作成のため
→create!
→localホスト:3000 railsアプリが起動エラー
localhost:3000にアクセスすると、
「Mysql2::Error::ConnectionError: Plugin caching_sha2_password could not be loaded Mysql2」
どうやらmySQL8系と同じように、認証形式が「caching_sha2_password」というものになっているらしいです。
こちらのサイトさまによると、DBで認証形式変更可能のようです。
https://kinaonao.blogspot.com/2018/08/ruby-on-rails-mysql.html
(追記)
こちらの記事によると、docker-compose.ymlのマウントを変更することで
MysqL8の認証方法(chaching_sha2_password)から通常の認証方法に変更もできるようです。
https://qiita.com/yensaki/items/9e453b7320ca2d0461c7
ただ私の状態は、
@ローカルのDBはいいけどDocker環境のDBってどうやって入るの!?
@そもそもマウント設定してるけどフォルダも作成されていないしよくわかっていない
@このrails環境構築のためだけに丸2日くらいかかった
の状態のため、以下でmySQLのアプリを作り直しましました。
起動したコンテナを
→railsフォルダ消してDocker関係のファイルのみ残して削除
→rails new
$ docker-compose run web rails new . --force --database=mysql --skip-bundle
→ビルドし直す
$ docker-compose build
でmySQL5.7で新しいアプリを作り直しました。
→コンテナ起動
$ docker-compose up -d
→db create
$ docker-compose run web rails db:create
docker+rails環境構築の参考にさせていただきました
https://qiita.com/azul915/items/5b7063cbc80192343fc0
まだまだmySQL・Dockerは勉強項目が多いです😕
docker環境作ったり色々やってたら過去のアプリを修正しようとした際に同じ手順で何度やってもエラー・・
bundle configを一旦削除し、
$bundle config --global build.mysql2 --with-opt-dir="$(brew --prefix openssl)"
$bundle install
で解決しました。
参考サイトさま
bundle installでmysql2がインストールできない問題の解決方法
issueにのってたようです。