

### 前提

ポートフォリオ作成のため、現在自作アプリを実装しております。  
現在、本番環境での自動デプロイを実装するため、参考記事を確認していた所、DB環境がMySQLに設定されていることが前提の記事が多いと感じました。  
そのため、以前はローカルでsqlite使用、本番でmysql使用と分けていたものを全ての環境でmysqlを使えるように設定したく実装を進めています。

### 環境

ruby 2.7.2  
rails 6.1  
macOS

### エラー内容

色んなことを試したため、かなり長くなっておりますがお力いただければ幸いです。

[code]

    hana_nav_app+[master] % bundle                                                        
    Fetching gem metadata from https://rubygems.org/............
    ・
    ・
    Fetching mysql2 0.5.3
    ・
    ・
    Using sass-rails 6.0.0
    Installing mysql2 0.5.3 with native extensions
    Using devise-i18n 1.10.0
    Using rails 6.1.4.1
    Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
    
        current directory: /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/ext/mysql2
    /Users/taddy/.rbenv/versions/2.7.2/bin/ruby -I /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/2.7.0 -r
    ./siteconf20210921-50046-8t4gxa.rb extconf.rb --with-cppflags\=-I/usr/local/opt/openssl@1.1/include
    checking for rb_absint_size()... yes
    checking for rb_absint_singlebit_p()... yes
    checking for rb_wait_for_single_fd()... yes
    *** extconf.rb failed ***
    Could not create Makefile due to some reason, probably lack of necessary
    libraries and/or headers.  Check the mkmf.log file for more details.  You may
    need configuration options.
    
    Provided configuration options:
            --with-opt-dir
            --without-opt-dir
            --with-opt-include
            --without-opt-include=${opt-dir}/include
            --with-opt-lib
            --without-opt-lib=${opt-dir}/lib
            --with-make-prog
            --without-make-prog
            --srcdir=.
            --curdir
            --ruby=/Users/taddy/.rbenv/versions/2.7.2/bin/$(RUBY_BASE_NAME)
            --with-mysql-dir
            --without-mysql-dir
            --with-mysql-include
            --without-mysql-include=${mysql-dir}/include
            --with-mysql-lib
            --without-mysql-lib=${mysql-dir}/lib
            --with-mysql-config
            --without-mysql-config
            --with-mysqlclient-dir
            --without-mysqlclient-dir
            --with-mysqlclient-include
            --without-mysqlclient-include=${mysqlclient-dir}/include
            --with-mysqlclient-lib
            --without-mysqlclient-lib=${mysqlclient-dir}/lib
            --with-mysqlclientlib
            --without-mysqlclientlib
    /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/2.7.0/mkmf.rb:1050:in `block in find_library': undefined method
    `split' for nil:NilClass (NoMethodError)
            from /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/2.7.0/mkmf.rb:1050:in `collect'
            from /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/2.7.0/mkmf.rb:1050:in `find_library'
            from extconf.rb:87:in `<main>'
    
    To see why this extension failed to compile, please check the mkmf.log which can be found here:
    
      /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/extensions/x86_64-darwin-20/2.7.0/mysql2-0.5.3/mkmf.log
    
    extconf failed, exit code 1
    
    Gem files will remain installed in /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3 for
    inspection.
    Results logged to
    /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/extensions/x86_64-darwin-20/2.7.0/mysql2-0.5.3/gem_make.out
    
    An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
    Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
    
    In Gemfile:
      mysql2
    
[/code]

### 解決したいこと

mysql2をインストールさせたいです。

### 試したこと

mysql@5.7を使用したいため、以前入れていたデータを全て削除しました。

[code]

    brew remove mysql
    brew cleanup
    
    sudo rm -rf /usr/local/Cellar/mysql*
    sudo rm -rf /usr/local/bin/mysql*
    sudo rm -rf /usr/local/var/mysql*
    sudo rm -rf /usr/local/etc/my.cnf
    sudo rm -rf /usr/local/share/mysql*
    sudo rm -rf /usr/local/opt/mysql*
    sudo rm -rf /etc/my.cnf
    
[/code]

次に`brew install mysql@5.7`でインストールを行い、mysqlのパスを通しました。  
下記コードが現在の状況です。

[code]

    export PATH="~/.rbenv/shims:/usr/local/bin:$PATH"
    eval "$(rbenv init -)"
    export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
    export PATH="$HOME/.rbenv/bin:$PATH"
    export PATH="/usr/local/opt/mysql@5.7/bin:$PATH" 
    
[/code]

バージョンを確認、mysqlコマンドを使用できることを確認

[code]

    ~ % mysql --version
    mysql  Ver 14.14 Distrib 5.7.35, for osx10.16 (x86_64) using  EditLine wrapper
    
[/code]

gemを変更後、bundleインストール実行し、このときはエラーなく成功。mysqlサーバも起動しました。

[code]

    Gemfile
    # gem 'sqlite3', '~> 1.4'
    gem 'mysql2', '~> 0.5.3'
    
    ~ % mysql.server start
    Starting MySQL
     SUCCESS! 
    ~ % 2021-09-20T11:43:31.6NZ mysqld_safe A mysqld process already exists
    
[/code]

DBの定義ファイルを変更

[code]

    default: &default
      adapter: mysql2
      pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      username: root
      timeout: 5000
    
    development:
      <<: *default
     database: hana_nav_app_development
    
    test:
      <<: *default
     database: hana_nav_app_test
    
    production:
      <<: *default
      database: hana_nav_app_production
    
[/code]

DB作成時でエラーが発生しました。

[code]

    hana_nav_app+[master] % bundle exec rails db:create
    rails aborted!
    LoadError: dlopen(/Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/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/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
      Reason: image not found - /Users/taddy/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/mysql2-0.5.3/lib/mysql2/mysql2.bundle
    /Users/taddy/rails_projects/hana_nav_app/config/application.rb:7:in `<main>'
    /Users/taddy/rails_projects/hana_nav_app/Rakefile:4:in `<main>'
    bin/rails:5:in `<main>'
    (See full trace by running task with --trace)
    
[/code]

ググるとシンボリックリンクの問題とのことでした。

[code]

    % bundle doctor
    
    実行結果
    Files exist in the Bundler home that are not readable/writable by the current user. These 
    ・ 文字数制限のため、省略
    ・
     * mysql2: /usr/lib/libSystem.B.dylib
     * mysql2: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib
    
[/code]

`The following gems are missing OS
dependencies:`以下に記述のあるgemをアンインストールしろとのことなので、まず最初にmysql2を削除しました。

[code]

    hana_nav_app+[master] % bundle exec gem uninstall mysql2
    Successfully uninstalled mysql2-0.5.3
    
[/code]

無事アンインストールできたので再度確認した所、bundleインストールしてとのことなので実行。

[code]

    hana_nav_app+[master] % bundle doctor                   
    The following gems are missing
     * mysql2 (0.5.3)
    Install missing gems with `bundle install`
    
[/code]

実行後のエラー文が「エラー内容」になります。  
この後、`gem install mysql2 -v '0.5.3'`も試したのですが駄目でした。

詳しい方がいましたらアドバイスいただけると幸いです。  
何卒よろしくお願いします。


CC BY-SA 4.0
2021-09-21T01:49:05.173
82611
2021-09-21T03:11:42.270
2021-09-21T03:11:42.270
3060
46968
question
ruby mysql bundler
sqlite3からmysqlに切り替える際、mysql2のインストールエラーが発生してしまう