【问题标题】:"rubygem mysql error: gem is not loaded" after CentOS upgradeCentOS 升级后出现“rubygem mysql 错误:gem 未加载”
【发布时间】:2017-05-12 00:38:31
【问题描述】:

我正在将系统从 EL 6 升级到 EL 7。我们有一个使用 ruby​​ 设置 MySQL 数据库的应用程序。我对红宝石和宝石知之甚少,所以我很难做到这一点。在 EL 6 下,设置过程可以正常工作。在 CentOS 7 下,处理 rakefile 时出现以下错误:

为数据库适配器指定了“mysql”,但未加载 gem。添加 gem 'mysql' 到您的 Gemfile

在 6 岁以下,我没有看到使用 gem list 安装的任何 MySQL gem 文件,但安装过程运行正常并且可以正确生成我们的数据库。

7岁以下可以手动运行:gem install mysql --with-mysql-config=/usr/lib64/mysql/mysql_config。 然后,安装脚本就可以工作了。

我正在通过rpm 安装大部分必需的 gems/ruby 应用程序。

我有:

ruby-2.0.0.648-29.el7.x86_64
rubygem-rake-0.9.6-29.el7.noarch
rubygem-activesupport-4.2.5.2-2.fc24.noarch
rubygems-2.0.14.1-29.el7.noarch
rubygem-activemodel-4.2.5.2-1.fc24.noarch
rubygem-activerecord-4.2.5.2-1.fc24.noarch
ruby-mysql-2.8.2-1.el7.x86_64

ruby-mysql 创建/usr/local/lib64/ruby/site_ruby/mysql.so

mysql.so 库是提供 MySQL 适配器还是有其他东西可以有效地提供 mysql gem?令人困惑的是,我不必在 EL 6 中做任何事情,而是必须专门在 EL 7 中安装它。

这是一个路径问题还是源的重大变化?我显然是从 Fedora 中提取 activesupport 和 activerecord rpm,所以我想那里可能存在冲突,但很难说。

我的database.yml 文件如下所示:

adapter: mysql
encoding: utf8
database: mydatabase
username: root
password:
host: 127.0.0.1
port: 3306

【问题讨论】:

  • 如果有 Gemfile,你通常会调用gem install bundler; bundle install 来设置环境。
  • 我在 el6 系统或 el7 系统上找不到任何与 mysql 相关的 gem 文件。实际上,我在任何脚本中都没有看到对“gem”调用的引用。我只有 Rakefile 和 database.yml 以及 ruby​​ 迁移脚本。我觉得其中一个 rpm,可能是 activerecord,正在做一些神奇的事情并使用它自己的 mysql 适配器。
  • Gemfile 将位于脚本的根目录中,名为 Gemfile
  • 没有。

标签: ruby centos


【解决方案1】:

尝试改用mysql2 gem:

在您的 Gemfile 中:

gem 'mysql2'

和database.yml:

adapter: mysql2

希望这会有所帮助。

【讨论】:

  • 我不认为我有 gem 文件如果有的话,我找不到它。
  • 如果你没有使用 Gemfile,你可以试试 gem install mysql2 看看是否有帮助。
【解决方案2】:

所以我不确定为什么原始脚本中从来没有 gemfile。正如我的 OP 中提到的,一个基本的解决方案是运行 gem install mysql,但这很奇怪,因为以前没有必要。

我认为正在发生的事情: 在 EL6 下,ruby-mysql rpm 将 mysql.so 放在正确的位置,并基本上发出 gem install 命令。我的 EL7 版本没有在 rpm 中调用正确的设置宏。

我做了什么来解决这个问题: 我使用 gem2rpm(非常棒的 rpm/package)来生成 ruby​​gem-mysql 规范文件。

https://github.com/fedora-ruby/gem2rpm

gem2rpm --fetch mysql(获取 gem) gem2rpm -T > ruby​​gem-mysql.spec.template gem2rpm -t ruby​​gem-.spec.template mysql-2.9.1.gem > ruby​​gem-mysql.spec

您必须在生成规范文件后对其进行一些修改,然后将其用于规范模板以根据您的需要正确构建规范文件。

然后只需使用 rpmbuild 来实际制作 rpm/srpm。

gem 列表现在在其中显示 mysql,并且安装脚本可以正常工作。

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2019-03-07
    • 2020-01-19
    相关资源
    最近更新 更多