mysql2宝石在更新到Ubuntu 16.04后无法工作 - libmysqlclient.so.18

15

更新之前一切都正常。 使用 RVM 和 rails (3.2.12) 的 ruby 1.9.3p392。 使用 MySQL 5.7.16,以及 Nginx 和 Unicorn。

日志显示

LoadError: libmysqlclient.so.18: cannot open shared object file: No such file or directory - /home/bill/apps/xxx/shared/bundle/ruby/1.9.1/gems/mysql2-0.3.16/lib/mysql2/mysql2.so

我尝试了:

  1. 卸载/安装mysql2 gem
  2. 运行bundle install

没有作用。有人在更新后遇到过这个问题吗?


mysql gem 不应该已经安装并在 1.9.3 版本的目录中查找吗?(/home/bill/apps/xxx/shared/bundle/ruby/1.9.3/..) - andrykonchin
是的,谢谢。我的旧mysql2 gem和新安装的mysql 5.7之间存在兼容性问题。在gemfile中更改gem版本会导致另一个错误。 - Henri
好的,我的错误信息现在是:LoadError: 请安装mysql2适配器:gem install activerecord-mysql2-adapter (mysql2不是bundle的一部分,请将其添加到Gemfile中)。 mysql2已经包含在gemfile中,我也安装了activerecord-mysql2-adapter。我会检查一下是否存在套接字问题。 - Henri
很奇怪。你确定 Gemfile.lock 包含所需的 gem activerecord-mysql2-adapter 并且已经运行了 bundle 安装这个 gem 吗? - andrykonchin
好的,现在它可以工作了。我将我的 gemfile 更改为旧版本(gem 'mysql2','~> 0.3.17'),该版本与我的 Rails 和 MySQL 5.7 兼容。然后在我的计算机上运行“Bundle install” … 将其推送到我的服务器并进行了 cap 部署。错误消失了。非常感谢。 - Henri
1个回答

32

卸载并重新安装mysql2宝石。

我也遇到了同样的问题。从Ubuntu 14升级到16,看到了这个错误。

为了解决问题,我只是使用bundler卸载了mysql2宝石,并重新安装了它。

  1. 卸载mysql2宝石:

    $ bundle exec gem uninstall mysql2
    
  2. 重新安装 mysql2 gem:

    $ bundle install
    

这是因为在安装 gem 时需要安装本地扩展,而像升级操作系统一样的大型系统更改需要重新构建这些本地扩展。

希望能有所帮助。


3
谢谢。我在其他地方找到了一个解决方法,建议使用gem uninstall mysql2,但它没有起作用。对于我来说,强制使用bundle exec从bundle中删除它是至关重要的部分。 - mr rogers
@mrrogers 是的,这个问题也困扰过我。bundle exec 就像是它自己的环境一样。还有令人困惑的是当人们使用 gem installsudo gem install 时。这可能会导致混乱。 - Joshua Pinter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接