使用 DataMapper 时找不到_mysql_init

_mysql_init not found when using DataMapper

提问人:rampion 提问时间:2/9/2013 最后编辑:tadmanrampion 更新时间:1/18/2023 访问量:575

问:

我有一个简单的MySQL表:

% mysql -u rampion dev -e 'describe person'
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | UNI | NULL    | auto_increment |
| uid   | varchar(256) | NO   | PRI | NULL    |                |
+-------+--------------+------+-----+---------+----------------+

我想运行一个简单的 DataMapper 脚本:

# temp.rb
require 'rubygems'
require 'datamapper'

DataMapper::Logger.new($stdout, :debug)
DataMapper.setup(:default, "mysql://rampion@localhost/dev")

class Person
  include DataMapper::Resource
  property :id,     Serial
  property :uid,    String
end

DataMapper.finalize

p Person.first_or_create(:uid => 'Steve')

但是当我运行它时,我收到动态链接器错误:

% ruby temp.rb
~/.rvm/gems/ruby-1.8.7-p334/gems/dm-validations-1.0.2/lib/dm-validations.rb:33: warning: already initialized constant OrderedHash
DataObjects::URI.new with arguments is deprecated, use a Hash of URI components (~/.rvm/gems/ruby-1.8.7-p334/gems/dm-do-adapter-1.0.2/lib/dm-do-adapter/adapter.rb:215:in `new') 
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: ~/.rvm/gems/ruby-1.8.7-p334/gems/do_mysql-0.10.12/lib/do_mysql/do_mysql.bundle
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: ~/.rvm/gems/ruby-1.8.7-p334/gems/do_mysql-0.10.12/lib/do_mysql/do_mysql.bundle
  Expected in: flat namespace

zsh: trace trap  ruby temp.rb

我已经设置为 ,这是我安装MySQL的地方,它似乎已经在那里定义了:LD_LIBRARY_PATH/usr/local/mysql/lib_mysql_init

% grep '_mysql_init' $LD_LIBRARY_PATH/libmysqlclient.18.dylib
Binary file /usr/local/mysql/lib/libmysqlclient.18.dylib matches

我不知道我需要做些什么来解决这个问题。

MySQL Ruby 数据映射器

评论

1赞 rampion 4/18/2013
嗯......我最近遇到了一个不同的问题,我发现我运行的是 32 位 ruby,但 gem 试图安装为 64 位。我想知道这是否相关。
1赞 sebastian 11/3/2014
我记得在没有更新/重新安装 mysql2 gem 的情况下更新 MySQL 客户端库后遇到了类似的问题。因此,可以肯定的是,您可以尝试更新 MySQL 客户端库,然后尝试重建您的 gem。显然,您已经构建了自己的MySQL版本;如果您使用的是基于 Debian 的 Linux 版本,请执行 .sudo aptitude reinstall libmysqlclient-dev; gem install mysql2
2赞 tadman 9/29/2015
在 OS X 上,您可能希望完全清理 RVM 并重新安装它,以便您拥有所有内容的 64 位干净版本。通常这很容易,会让你回到你想去的地方。理想情况下,您也可以从 Ruby 1.8.7 开始。bundle install
0赞 the Tin Man 11/4/2015
使用 should rebuild gem 以匹配当前环境。您可能希望运行以将 gem 代码刷新到在 1.8.7 上运行的最后一个版本,以提取修复。我强烈建议从 1.8.7 升级到至少 1.9.3-p551,这是 1.9 行的当前/最后一行。您将获得速度和安全补丁/修复。请参阅有关将 RVM 升级到其最新版本的 rvm.io/rvm/upgrading;让它保持最新状态是一个非常好的主意,即使你要让 Ruby 滞后。gem pristine --allgem up

答:

0赞 Dorian 4/1/2022 #1

似乎是旧版本MySQL的问题,现在不应该发生,请参阅 https://github.com/brianmario/mysql2/issues/121