rake db:migrate出现"Undefined method 'accept' for nil:NilClass"错误

18
使用ruby-1.9.2和rails 3.2.1。mysql2的版本是0.2.7。
运行rake db:migrate时出现错误:“undefined method 'accept' for nil:NilClass:”
跟踪包括:
gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'

你曾经成功地运行过 rake db:migrate 吗,还是这是一个全新的安装?其他任何 rake 命令都有效吗? - Marc Talbot
嗨,马克,这是一个全新的安装 - 升级到10.7 Mac OS X。Rake db:create工作正常。 - vectran
@vectran,你解决了这个问题吗?我现在也遇到了同样的问题。 - chhantyal
7个回答

28

将您的Gemfile更改为:

gem 'activerecord-mysql2-adapter'

至:

gem 'mysql2'

1
为什么会发生这种情况? - Maruccio
一年多过去了,仍在解决问题! - Stephen

11

好的,我在我的机器上进行了修复。这是由于较旧的MySQL2引起的。请按照以下步骤解决该问题。

bundle update mysql2

        Or

bundle update

欲了解更多详情,请访问Github


10

对我来说,从 Gem 文件中删除 gem 'activerecord-mysql2-adapter' 就可以解决问题。


升级从Rails 3.0.3到Rails 3.2.8时对我有效。 - superluminary
1
那种药治好了我的病。 - Martin Capodici

1

安装最新的mysql2 ruby gem。 我的环境:

Rails3.2.9 + mysql2 0.2.9,  : "undefined method `accept' for nil:NilClass:"
Rails3.2.9 + mysql2 0.3.11, works fine

1
由于您的 mysqlruby 版本不兼容,可能会出现此问题。
要解决此问题,请通过 gem install mysql 更新您的 mysql gem,这将安装最新的 mysql gem。
然后在您的 Gemfile 中添加以下内容。
如果问题仍然存在,则应查看您的 ruby 和 mysql 之间的兼容性。

0

如果你的 database.yaml 文件中有以下内容:

dev:
  adapter: mysql2

即使您使用的宝石是mysql2,也应该是这样:

dev:
  adapter: mysql

我花了一周的时间才理解这个,希望它能为你节约一些时间。

-1

定义:

def nil.accept
  puts "Accepted."
end

错误将会消失。


太有趣了,希望不会有太多人陷入陷阱。在一个问答帮助网站上可能不会受到良好的反响。 - Mathieu J.

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