我有一些问题时,试图安装mysql2宝石为Rails。当我试图通过运行bundle install或gem install mysql2来安装它时,它会给我以下错误:

安装mysql2错误:错误:未能建立gem本地扩展。

我如何解决这个问题并成功安装mysql2?


当前回答

针对Windows用户的更新解决方案。我在跑步

Windows 10

MySql 8.0.30

Ruby 3.1.2

我的Ruby版本来自rubyinstaller.org,包含了MYSYS开发工具包

我下载了一个MariaDB C连接器库msi安装文件v3.1.17,运行它,它在程序文件的目录中安装了相关文件。我把这个目录复制到另一个位置,重命名它,这样它就没有任何空格,然后运行命令:

gem install mysql2 --platform=ruby -- --with-mysql-dir="c:/my-mariadb-connector-path-with-no-spaces"

这给了我一颗有用的宝石。

这是该库的特定版本,而不是最新的版本。在MariaDB网站上寻找下载选项有点令人困惑,所以这里是直接下载链接。

https://dlm.mariadb.com/2319542/Connectors/c/connector-c-3.1.17/mariadb-connector-c-3.1.17-win64.msi

在我走到这一步之前,我尝试了好几种方法,但都没有奏效。我在下面列出了它们作为背景信息,但如果你感兴趣的只是一个可行的解决方案,那么你现在可以停止阅读了。

一些来源建议,如果你安装了MYSYS devkit,你可以用下面的命令构建gem:

ridk exec gem install mysql2 --platform=ruby -- --use-system-libraries

这并不适合我。

您可能还看到过建议下载MySQl连接器库的归档版本(6.1)。我尝试了这个,gem编译,但当我尝试启动我的应用程序时,我得到了一个错误消息:“不正确的MySQL客户端库版本!这个gem是为6.1.11编译的,但客户端库是10.5.5。”

在MySQL V8及以上版本中,C库不再是可选的额外选项,而是包含在主安装中。我找到了相关文件,将它们复制到一个没有空格的目录路径,并尝试了通常的命令。宝石再次编译,但应用程序不会启动。这次错误消息显示“此gem是为8.0.30编译的,但客户端库是10.5.5”

我还尝试了MariaDB库的最新版本。错误消息说该gem是为10.6.8编译的。你需要上面描述的特定版本,是的,即使你使用的是Oracle公司分发的“原始”MySql,它也确实是你需要的MariaDB库

其他回答

MacOS用户的另一种方式

如果你使用“brew”安装mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

X.X.X =要安装的mysql2 gem的版本号 y.y.y =你安装的mysql版本ls /usr/local/Cellar/mysql

I got the gem built on Mac OS X 10.6.6 by 1) Ensuring the Developer tools package is installed 2) Downloading the current MySQL package (5.5.8 in my case) from Source 3) Installing the cmake tool from cmake.org 4) Following the instructions in section 2.11 of INSTALL-SOURCE from the mysql distribution files 5) sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include The gem built successfully, but there are two errors in the documentation that rdoc and ri complain about. But now when I try to require 'mysql2' I get a

LoadError: no such file to load -- mysql2/mysql2

我希望我得到的错误是libmysqlclient.16。Dylib无法找到,因为我们在另一篇文章中找到了(搜索install_name_tool)。

我的$PATH有/usr/local/mysql在里面(这是我的源代码和构建文件所在的位置),所以我有点难住了。如果有人有什么想法,我会在睡了几个小时后再来看看。

这里有一个解决方案,希望对Windows用户有帮助!

在Windows上使用Rails 3使用MySQL

安装railsinstaller -> www.railsinstaller.org(我安装到c:\Rails) 安装MySQL(我使用MySQL 5.5) -> dev.mysql.com/downloads/installer/

--- for mySQL installation --- If you dont already have these two files installed you might need them to get your MySQL going vcredist_x86.exe -> http://www.microsoft.com/download/en/details.aspx?id=5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/download/en/details.aspx?id=17718 Use default install Developer Machine -MySQL Server Config- port: 3306 windows service name: MySQL55 mysql root pass: root (you can change this later) (username: root) -MySQL Server Config- --- for mySQL installation ---

安装mysql2 Gem 重点:使用Git Bash命令行(这是安装在railsinstaller) -> start/Git Bash ——with-mysql-lib="c:\Program Files\MySQL\ Server 5.5\lib"——with-mysql-include="c:\Program Files\MySQL\ Server 5.5\include"' 现在gem应该已经正确安装了 最后复制libmysql.dll文件 C:\Program Files\MySQL\MySQL Server 5.5\lib 来 Rails C: \ \ Ruby1.9.2 \ bin 安装mysql2 Gem

你现在将能够使用你的Rails应用程序与MySQL,如果你不确定如何创建一个Rails 3应用程序与MySQL阅读…


用MySQL开发一个Rails 3应用程序 打开命令提示符(不是Git Bash) -> start/cmd 导航到您的文件夹(c:\Sites) 创建新的rails应用程序

rails new world

删除文件c:\Sites\world\public\index.html 编辑文件c:\Sites\world\config\routes.rb 添加这一行-> root:to => 'cities#index'

打开命令提示符(生成视图和控制器)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer

编辑文件c:\Sites\world\app\models\city。Rb变成这样

class City < ActiveRecord::Base
 set_table_name "city"
end

编辑文件c:\Sites\world\config\database。Yml看起来像这样

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

添加到gemfile

gem 'mysql2'

打开命令提示符窗口cmd,而不是Git Bash(运行你的应用程序!) 导航到应用程序文件夹(c:\Sites\world)

rails s

在这里打开浏览器-> http://localhost:3000

用MySQL开发一个Rails 3应用程序

从[这里][1]下载连接器C文件。(https://downloads.mysql.com/archives/c-c/) 将文件解压到一个位置,如C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib 使用这个模板

install mysql2——'——with-mysql-lib="$lib_location"——with-mysql-include="$include_location"'

我的安装位置是lib_location -> C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib

——with-mysql-lib="C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib"——with-mysql-include="C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\include"'

windows用户: 你可以设置lib和mysql的路径,例如,如果你使用xampp,你可以这样:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'