‘mysql的未定义方法init:Class’

我一直遇到MySQL服务器安装问题,在停电后搞砸了。

组态

Intel i5 Mac运行OS X 10.6.5
Ruby 1.9.2已安装
安装了Rails 3.0.1
MySQL服务器(最后)安装并运行
我完全重新安装了MySQL,它删除了本地开发/测试/生产数据库。 所以,我已经运行了create database development; 在MySQL中,让dev数据库为迁移做好准备。

目前的目标

  • 运行rake db:migrate以重新获取我的数据库。 (我目前无法从Rails访问我的数据库或Mysql。)

错误

使用'mysql', '2.8.1'并运行rake db:migrate ,我收到错误:

 rake aborted! undefined method 'init' for Mysql:Class 

堆栈跟踪:

 /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/mysql_adapter.rb:30:in 'mysql_connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:230:in 'new_connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:238:in 'checkout_new_connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:194:in 'block (2 levels) in checkout' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in 'loop' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in 'block in checkout' /Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in 'mon_synchronize' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in 'checkout' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in 'connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:318:in 'retrieve_connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:97:in 'retrieve_connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in 'connection' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:486:in 'initialize' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in 'new' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in 'up' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/migration.rb:415:in 'migrate' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/railties/databases.rake:142:in 'block (2 levels) in ' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in 'call' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:636:in 'block in execute' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in 'each' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:631:in 'execute' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:597:in 'block in invoke_with_call_chain' /Users/sscirrus/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/monitor.rb:201:in 'mon_synchronize' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:590:in 'invoke_with_call_chain' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:583:in 'invoke' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2051:in 'invoke_task' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'block (2 levels) in top_level' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'each' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2029:in 'block in top_level' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in 'standard_exception_handling' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2023:in 'top_level' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2001:in 'block in run' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:2068:in 'standard_exception_handling' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/lib/rake.rb:1998:in 'run' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.8.7/bin/rake:31:in '' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in 'load' /Users/sscirrus/.rvm/gems/ruby-1.9.2-p0/bin/rake:19:in '' 

你在看什么就在这里 。

奥卢夫尼尔森

我有Rails 3.1-rc4,MySQL 5.5.15(刚升级)和Mac OS X Lion。 我的问题原来是mysql_api.bundle文件链接到正确的libmysqlclient.18.dylib文件,但它找不到库:

 otool -L ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle /Users/rowland/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle: /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1) libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) 

在运行时,找不到库。 我第一次尝试解决这个问题是添加一个LC_RPATH命令,但这还不够(也许是因为它在列表的末尾)。 相反,我直接更改了库链接:

 install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle 

现在otool告诉我:

 otool -L ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle /Users/rowland/.rvm/gems/ruby-1.9.2-p180@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle: /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1) /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0) 

它又快乐了。 这仅适用于Mac OS X.

这条线帮助我摆脱了上面的错误。 在Mac OS X 10.7上。 狮子

 export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH" >> ~/.profile 

我遇到了同样的错误,尝试使用mysql-2.8.1 gem在CentOS上运行一个rails网站。 如果我以root身份启动它,我可以运行该网站,但是当我切换到我的应用程序用户时,它会抛出此错误。 它最终成为mysql目录结构的权限。 我在mysql目录上运行了一个chmod -R 755并重启了我的rails服务器,错误就消失了。 错误有点模糊,似乎涵盖了驱动程序连接到数据库时的所有内容。

没有其他解决方案适合我,但:

 brew install mysql-connector-c sudo gem install mysql -- --with-mysql-lib=/usr/local/mysql/lib 

在mac osx上使用原生扩展的ruby mysql

添加Shaun的答案,我可以使用:

我的设置是通过Homebrew安装OS X Lion + apache + passenger + mysql。 当我运行“rails server”时,我必须设置一个DYLD_LIBRARY_PATH变量,但我无法弄清楚如何在apache中设置它。 我不得不这样做:

 cd /Library/Ruby/Gems/1.8/gems/mysql-2.8.1/lib sudo install_name_tool -change libmysqlclient.18.dylib `brew --prefix mysql`/lib/libmysqlclient_r.18.dylib mysql_api.bundle 

同样的答案,只是特定于Homebrew安装,我的gem不像他的那样〜/ .rvm / gems。

这对我在ubuntu上工作

 export LD_LIBRARY_PATH=/usr/local/mysql/lib ldconfig 

我只是把它放在/etc/profile的底部,对于任何新的登录,一切正常。 您可以快速测试它,而无需再次登录

 source /etc/profile 

我得到同样的错误,但我已经将’mysql’中的gem替换为’mysql2’并且它适用于我所以我与你分享如果任何人仍然得到相同的错误