初心者プログラマのひとり勉強部屋

若葉マークのプログラマー☺️

【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) 

-----

 

- bundle config

- nokogiriインストールエラー対処

- mySQL2インストールエラー対処

※mySQL2でのdocker環境構築は未解決です。→追記で解決

(結局mysqlでdocker環境構築しました)

 

 

                             ■bundle config

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/

 

 

                             ■nokogiriインストールエラー

下記のサイトさまが詳しいです。

https://qiita.com/thunders/items/101c6b329830fb1fb27d

 

オプション付きで実行

$gem install nokogiri -- --use-system-libraries

bundle configに追加され、次回以降はこの設定が適用されるようです。

 

 

                             ■mySQL2インストールエラー

①以前の記事参考

※こちらのサイトさまによると、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の意味が全然わからなかったが、上記でダメだった方のサイトを参考にダメもとで

$ brew update && brew upgrade

→$bundle install できた!

 

※それでもダメな場合⇨③

 

mySQL2がインストールできてよかった!

 

 

で終わりでなく問題はここからでした。

 

今回、docker環境でrailsアプリを作成しています。

 

※doker環境構築結果→ここからは未解決のためmySQLrailsアプリを作り直しました。

とにかくdocker環境作りたいだけの方は最初からmysqlでアプリを作ることをお勧めします。。

 

 

docker環境でmySQL2をインストールしましたが、

DB作成のため

$docker-compose run web bin/rake db:create

→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のアプリを作り直しましました。

 

起動したコンテナを

$ docker-compose down -v

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

 

f:id:mocomo012:20200322231755p:plain

やっと起動した

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にのってたようです。

`ld: library not found for -lssl` after Mac OS Sierra upgrade · Issue #795 · brianmario/mysql2 · GitHub