質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

mysql2 のインストールでコケる(未解決です)

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,217

Tsuyoponpon

score 33

タイトルにもありますが,mysql2をGemfileに記載し、「bundle install」をかけた際、以下のようなエラーが発生しました。ググりまくったのですが解決できなかったため、質問をさせていただきました。以下には現在の状況や考えられる原因を記載しますので、解決策をご存知の方はご指導いただけますと幸いです。

開発環境

OS MacOsX
rails: 5.1.4
ruby: 2.4.3

発生しているエラー

...
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
...
result.c:326:40: warning: incompatible pointer types assigning to 'my_bool *' (aka 'char *') from 'bool *' [-Wincompatible-pointer-types]
    wrapper->result_buffers[i].is_null = &wrapper->is_null[i];
                                       ^ ~~~~~~~~~~~~~~~~~~~~
result.c:328:40: warning: incompatible pointer types assigning to 'my_bool *' (aka 'char *') from 'bool *' [-Wincompatible-pointer-types]
    wrapper->result_buffers[i].error   = &wrapper->error[i];
...
2 warnings generated.
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -limported_openssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
...
An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'` succeeds before bundling.

考えられる原因

エラー内容通りに、下のコマンドで確認したところ

gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'


結局同じエラーが発生

...
2 warnings generated.
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -limported_openssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)


次は、「ld: library not found for -limported_openssl」の文言から、opensslがあるか確認しました。

$ openssl version
LibreSSL 2.6.5


入ってました。。
さらにググってみると、こういう時はパスを追加するようなので、

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

追記

Opensslのパッケージをインストールしてみました。

$ openssl version
OpenSSL 1.0.2t  10 Sep 2019

$ which openssl
/usr/local/opt/openssl/bin/openssl

$ brew info openssl
...
For compilers to find openssl you may need to set:
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

#パスを通す
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"


追記内容を実行したのですが、エラー内容は未だに変わりません。
もしかすると、パスの通し方が間違っているのでしょうか?

解決策をご存知の方がおられましたら、ご教授いただけますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yoorwm

    2019/10/17 17:12

    > bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
    この部分、パスなんで実際に /usr/local/opt/openssl/include があるのか調べてみてください
    無かったらたぶん、opensslの開発用パッケージ一式が無いという事なんで、インストールすると解決すると思います
    (ディストリビューション毎に違うので、プラットフォームの情報を追記するといいかと思います)

    キャンセル

  • ryuii

    2019/10/17 17:15

    実際にコマンドを実行している、開発用OSはなんでしょうか?

    キャンセル

回答 2

+2

以下のコマンドでmysql@5.6 のブランチを切り替えることにより問題を回避できると思われます。
mysql2 0.4.10で発生している不具合らしく MySQL 5.6.46 から MySQL 5.6.43 に切り替えることで回避できそうです。

$ brew uninstall mysql@5.6
$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
$ git checkout f171f1c746db01c283aa137cb24248fbb8eb7a18 Formula/mysql@5.6.rb
$ brew install mysql@5.6

参考
https://github.com/brianmario/mysql2/issues/1074#issuecomment-542993746

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/20 00:39 編集

    @KKKOOOTTT
    `$mysql --version` を実行結果は何が表示されるか教えていただけますでしょうか?

    キャンセル

  • 2019/10/20 15:23

    @fkm_y
    ありがとうございます。

    mysql --versionの実行後は、
    zsh: command not found: mysql
    とでます。
    mysql@5.6.rb` の中身を置き換えてから、このエラーが出ます。

    再度、
    $ brew uninstall mysql@5.6
    $ brew install mysql@5.6
    を行いましたが、
    zsh: command not found: mysql
    が出ます。

    キャンセル

  • 2019/10/20 15:59

    @KKKOOOTTT
    mysql@5.6.rb の中身は元に戻していますでしょうか?

    または何らかの理由でパスが通っていないのでは?

    キャンセル

0

macOSでGemをインストールするライブラリが足りないと思われるので、(mysql)
Homebrewで以下のようにインストールすると必要なライブラリも入るので、実行してから、bundle installを試してみてください。

brew install mysql

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/17 18:18

    ryuji さん

    ご回答ありがとう御座います!
    教えていただいた通り、Homebrew経由でMySQL2をダウンロードしたのですが、エラー内容は変わりませんでした。
    もう少し解決策を探してみようと思います!ありがとう御座いました!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる