【问题标题】:An error occurred while installing mysql2 (0.4.8), and Bundler cannot continue安装mysql2(0.4.8)时出错,Bundler无法继续
【发布时间】:2018-01-10 11:13:02
【问题描述】:

如何在 ruby​​ on rail 中修复此错误。

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.2'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
gem 'mysql 2', '0.4.8'
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '~> 3.0.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'spree', '~> 3.2.1'
gem 'spree_auth_devise', github: 'spree/spree_auth_devise'
gem 'spree_gateway', github: 'spree/spree_gateway'
gem 'spree_i18n', github: 'spree-contrib/spree_i18n', branch: 'master'

我运行了“捆绑安装”并发生了这个错误。 所以为了修复项目的错误,我在控制台中运行了'gem install mysql2'0.4.8''命令,但我无法修复它。

这个 ruby​​ on rails 使用 Spree 框架。

编辑:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/admin/.rvm/gems/ruby-2.4.1/gems/mysql2-0.4.8/ext/mysql2
/Users/admin/.rvm/rubies/ruby-2.4.1/bin/ruby -r ./siteconf20170803-6579-foq4sg.rb extconf.rb
checking for rb_absint_size()... yes

我运行了“捆绑安装”,但由于此错误,我无法成功执行此命令。

【问题讨论】:

标签: ruby-on-rails spree


【解决方案1】:

我认为你缺少 mysql 的开发库:

在 ubuntu 上

sudo apt-get install libmysqlclient-dev

在 Red Hat/CentOS 和其他使用 yum 的发行版上:

sudo yum install mysql-devel

在带有 Homebrew 的 Mac OS X 上:

brew install mysql

【讨论】:

  • 感谢您的回答。在 Mac OS 上,我运行命令“brew install mysql”,然后运行“bundle install”。现在没有错误了。
  • 谢谢,因为我以为我已经安装了 mysql,所以这让我省了很多麻烦。
  • 现在是sudo apt-get install default-libmysqlclient-dev
  • 我在 mac bigsur 但我仍然收到错误?
  • debian/ubuntu 包名已重命名,现在应该使用sudo apt-get install libmariadb-dev-compat libmariadb-dev。
【解决方案2】:

我遇到了类似的问题,但对于 v4.10

Error occurred while installing mysql2 (0.4.10), and Bundler cannot continue

所以我必须运行以下命令来解决上述问题。

sudo apt-get update
sudo apt-get install build-essential

【讨论】:

    【解决方案3】:

    对于 Mac,我遇到了 openssl 问题

    An error occurred while installing mysql2 (0.5.2), and Bundler cannot continue.
    

    我修复了这个问题,使用如下命令;

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

    控制台结果:

    Fetching mysql2 0.5.2
    Installing mysql2 0.5.2 with native extensions
    Using puma 3.12.0
    Using sprockets 3.7.2
    Using sprockets-rails 3.2.1
    Fetching rails 5.2.2.1
    Installing rails 5.2.2.1
    Using rubyzip 1.2.2
    Using sass-listen 4.0.0
    Using sass 3.7.3
    Using tilt 2.0.9
    Using sass-rails 5.0.7
    Using selenium-webdriver 3.141.0
    Using spring 2.0.2
    Using spring-watcher-listen 2.0.1
    Using turbolinks-source 5.2.0
    Using turbolinks 5.2.0
    Using uglifier 4.1.20
    Using web-console 3.7.0
    Bundle complete! 18 Gemfile dependencies, 79 gems now installed.
    Use `bundle info [gemname]` to see where a bundled gem is installed.
    

    另类解决

    如果您仍然有错误并在控制台中收到消息:You are replacing the current local value of build.mysql2, which is currently nil。请尝试如下:

    $ export LDFLAGS="-L/usr/local/opt/openssl/lib"
    $ export CPPFLAGS="-I/usr/local/opt/openssl/include"
    

    然后运行:

    $ sudo gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib
    

    显示结果:

    Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
    This could take a while...
    Successfully installed mysql2-0.5.2
    Parsing documentation for mysql2-0.5.2
    Installing ri documentation for mysql2-0.5.2
    Done installing documentation for mysql2 after 0 seconds
    1 gem installed
    

    最后,在你的项目中运行 bundle install:

    $ sudo bundle install
    

    让我知道它是否可以挽救您的一天!!! :)

    【讨论】:

    • 这为我修好了!谢谢你好心的陌生人。
    • 100% 绝对没有我尝试过的解决了我的问题。最好的部分是,运行 gem list 会产生许多 gem,包括列出的 mysql2 (0.5.2) 正在安装.....我会失去它
    【解决方案4】:

    如果您使用的是 mac,请确保先安装 openSSL。

    brew install openssl
    

    然后导出

    $ export LDFLAGS="-L/usr/local/opt/openssl/lib"
    $ export CPPFLAGS="-I/usr/local/opt/openssl/include"
    

    确保你已经安装了 mysql

    gem install mysql2 -v '0.5.3' \
      --source 'https://rubygems.org/' -- \
      --with-cppflags=-I/usr/local/opt/openssl/include \
      --with-ldflags=-L/usr/local/opt/openssl/lib
    

    然后运行捆绑

    bundle install
    

    我的头发几乎掉光了,因为我得到了一台新机器,但我不记得我必须安装 openssl。

    【讨论】:

    • 我遇到了同样的问题,上面的方法解决了。但是我不需要将gem install mysql2 作为 sudo 运行,因此似乎没有必要通过错误。
    • 谢谢,这里省了一些头发?
    【解决方案5】:

    Ubuntu 18

    您可能需要安装

    sudo apt-get install libssl-dev
    

    如This回答

    【讨论】:

      【解决方案6】:

      MacOS 蒙特雷 (M1)

      lib 和 include 文件在 Homebrew 中的位置已更改。我使用this guidance 设置了正确的安装路径。

      我首先使用procedure 刷新了我的 Ruby 和 Rails 安装。这将安装 openssl 依赖项。

      $ export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix openssl@1.1)/lib/
      

      在仔细检查了我的mysql 安装后,我遇到了最后一个障碍,zstd 阻止了构建。我使用(感谢this answer)解决了这个问题:

       bundle config --local build.mysql2 \
         "--with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib"
      

      你现在可以再次运行 bundle

       bundle install
      

      【讨论】:

        【解决方案7】:

        我找到了我的 mysql 的路径,它是通过 homebrew 安装的并运行以下命令:

        gem install mysql2 -- \
         --with-mysql-lib=/opt/homebrew/Cellar/mysql/8.0.27/lib \
         --with-mysql-dir=/opt/homebrew/Cellar/mysql/8.0.27 \
         --with-mysql-config=/opt/homebrew/Cellar/mysql/8.0.27/bin/mysql_config \
         --with-mysql-include=/opt/homebrew/Cellar/mysql/8.0.27/include 
        

        替换你的mysql的路径,它应该可以解决问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-07-08
          • 2014-11-07
          • 2014-11-04
          • 1970-01-01
          • 2016-03-14
          • 2022-01-20
          • 2017-02-09
          • 2018-09-08
          相关资源
          最近更新 更多