【问题标题】:Ruby gem failure to load - Unable to load driver 'MySQL'Ruby gem 无法加载 - 无法加载驱动程序“MySQL”
【发布时间】:2015-07-24 02:28:25
【问题描述】:

我有一个已经运行多年的应用程序。然后我们将服务器迁移到 Ubuntu 15.04 并安装了 Ruby。

sudo apt-get install curl
sudo apt-get install ruby2.1
sudo gem update --system
sudo apt-get install rake
apt-get install ruby-dev
sudo gem install amatch
sudo apt-get install libmysqlclient-dev
sudo gem install -r dbi
sudo gem install -r mysql dbd-mysql

然后我们运行程序并得到这个错误..

/var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:300:in `block in load_driver': Unable to load driver 'MySQL' (underlying error: uninitialized constant DBI::DBD::MySQL) (DBI::InterfaceError)
    from /usr/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
    from /var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver'
    from /var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver'
    from /var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect'

程序本身(更改了用户名和密码)

#!/usr/bin/ruby
require "rubygems"
gem 'mysql'
gem 'dbi'
require "dbi"
require "amatch"

include Amatch

name_sub = {    "unit"          => "un",
                "unt"           => "un",
                "tract"         => "tr",
                "estate"        => "est",
                "university"    => "univ",
                "trust"         => "trst"  }

op_sub = {      "partnership"   => "PS",
                "partnershp"    => "PS",
                "partner"       => "PS",
                "prtnr"         => "PS",
                "ptnr"          => "PS",
                "ptnrsp"        => "PS",
                "corporation"   => "C",
                "corp"          => "C",
                "company"       => "co",
                "incorporation" => "I",
                "inc"           => "I",
                "oil"           => "O",
                "gas"           => "G",
                "exploration"   => "E",
                "production"    => "P",
                "operating"     => "oper",
                "energy"        => "engy",
                "management"    => "mgmt",
                "resources"     => "res",
                "minerals"      => "min",
                "petroleum"     => "pet"  }


def mangle(s, dictionary = {})
  return "" unless s
        # lowercase | special case        | alphanumerics only
        s.downcase().gsub(/l.l.c./, 'llc').gsub(/\W/, " ").split(" ").map do |word|
    dictionary.fetch(word, word)
  end.join(' ')
end

stop_attempts = -1
PRODUCTION = false

begin
        # now the actual code



  # development database
  DBI.connect("dbi:MySQL:database=matching;" "host=enus", "mott", "bM^7ezOqYyn") do |outdb|
  DBI.connect("dbi:MySQL:database=ownership;" "host=enus", "mott", "bM^7ezOqYyn") do |lease_db|

  # re-create phase3 table
    outdb.do("drop table if exists phase3")
    sql = "create table phase3 (" +
      "id bigint not null auto_increment primary key, " +
      "lod_id bigint, rrc_id bigint, district varchar(255), " +
      "name_percent float, rrc_lease_no varchar(255)," +
      "op_percent float, field_percent float, total float, " +
      "key k1 (lod_id), key k2 (rrc_id), key k3 (district), " +...

通过详尽的 Google 搜索找到了安装 dbd-mysql 的建议和其他建议,但均未奏效。

那么这里的失败是什么?我不是一个 Ruby 人,我是一个卑微的 IT 人,试图让它恢复并运行。

【问题讨论】:

    标签: mysql ruby


    【解决方案1】:

    看起来在我的 Mac 上尝试此操作时区分大小写的文件系统存在一些问题,但我能够通过将连接字符串从“MySQL”更改为“Mysql”来进行测试,例如:

    2.1.5@test_dbi ~$ cat test_dbi.rb 
    #!/usr/bin/ruby
    require "rubygems"
    require 'dbi'
    DBI.connect("dbi:Mysql:database=matching;" "host=enus", "mott", "bM^7ezOqYyn") 
    2.1.5@test_dbi ~$ 
    

    【讨论】:

    • 更改大小写后仍然出现错误- /var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:300:in block in load_driver': Unable to load driver 'Mysql' (underlying error: uninitialized constant DBI::DBD::Mysql) (DBI::InterfaceError) from /usr/lib/ruby/2.1.0/monitor.rb:211:in mon_synchronize' 从/var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:242:in load_driver' from /var/lib/gems/2.1.0/gems/dbi-0.4.5/lib/dbi.rb:160:in _get_full_driver' 来自 /var/lib/gems/2.1.0/gems/dbi-0.4 .5/lib/dbi.rb:145:in `connect'
    【解决方案2】:

    解决了这个问题。

    核心故障是 Ruby 2.1.0 本身的错误代码。 请参阅此处以修复 Ruby 本身。 [DBI Row / delegate behavior between ruby 1.8.7 and 2.1

    一旦我开始收到错误,我将 Mysql 的 DBI 调用更改为 MySQL 希望修复它,但这又导致了另一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-11
      • 2017-01-15
      • 2011-09-04
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多