部署 执行 bundle exec rake db:migrate 后,得到报错信息: rake aborted! NoMethodError: undefined method `accept' for nil:NilClass

woz24416 · 2014年09月20日 · 最后由 woz24416 回复于 2014年09月25日 · 4722 次阅读

在$ rails generate scaffold User name:string email:string 这一步之后,在执行 bundle exec rake db:migrate 这条命令之后,出现如下报错信息: rake aborted! NoMethodError: undefined method `accept' for nil:NilClass

使用环境如下: 系统:OS X 10.9.5 Ruby: ruby2.0.0p481 Rails: 4.0.2

Gemfile 相关内容如下: gem 'rails', '4.0.2' gem 'mysql2', '0.2.6' gem 'sass-rails', '4.0.1' gem 'uglifier', '2.1.1' gem 'coffee-rails', '4.0.1' gem 'jquery-rails', '2.2.1' gem 'turbolinks', '1.1.1' gem 'jbuilder', '1.0.2' group :doc do # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '0.3.20', require: false end

database.yml 的内容如下: development: adapter: mysql2 encoding: utf8 database: demo_app_development pool: 5 username: root password: rails host: 127.0.0.1 port: 3306

*** LOCAL GEMS ***

actionmailer (4.0.2) actionpack (4.0.2) activemodel (4.0.2) activerecord (4.0.2) activerecord-deprecated_finders (1.0.3) activesupport (4.0.2) arel (4.0.2) bigdecimal (1.2.0) builder (3.1.4) bundler (1.6.2) bundler-unload (1.0.2) coffee-rails (4.0.1) coffee-script (2.3.0) coffee-script-source (1.8.0) erubis (2.7.0) execjs (2.2.1) executable-hooks (1.3.2) gem-wrappers (1.2.4) hike (1.2.3) i18n (0.7.0.beta1, 0.6.11) io-console (0.4.2) jbuilder (1.5.3, 1.0.2) jquery-rails (3.1.2, 2.2.1) json (1.8.1, 1.7.7) mail (2.5.4) mime-types (1.25.1) minitest (4.7.5, 4.3.2) multi_json (1.10.1) mysql2 (0.3.16, 0.3.11, 0.2.6) polyglot (0.3.5) psych (2.0.0) rack (1.5.2) rack-test (0.6.2) rails (4.0.2) railties (4.0.2) rake (10.3.2, 0.9.6) rdoc (4.1.2, 4.0.0, 3.12.2) rubygems-bundler (1.4.4) rvm (1.11.3.9) sass (3.4.5, 3.4.4, 3.2.19) sass-rails (4.0.3, 4.0.1) sdoc (0.4.1, 0.3.20) sprockets (2.12.2, 2.11.0) sprockets-rails (2.0.1) sqlite3 (1.3.9, 1.3.8) test-unit (2.0.0.0) thor (0.19.1) thread_safe (0.3.4) tilt (1.4.1) treetop (1.4.15) turbolinks (2.3.0, 1.1.1) tzinfo (0.3.41) uglifier (2.5.3, 2.1.1)

恳请得到诸位的帮助,万分感谢!!!

如果 没有源代码,也不知道 migration file 信息,谁能猜得出来 这个 这 accept 方法 定义在哪里 了?

请问哪部分的源码?能够提示我一下路径吗?我可以 copy 出来,谢谢

#2 楼 @woz24416 LZ, 把代码 push 到 github 上,然后贴出来吧

把 mysql2 后面的版本去掉,bundle update mysql2, 然后试试

@steven_yue Incorrect MySQL client library version! This gem was compiled for 5.6.20 but the client library is 5.5.28. (RuntimeError) 如上是将 Gemfile 中 mysql 的版本号去掉后,rails serrver 的报错信息。

PS:此时的 mysql2:Using mysql2 0.3.16 (was 0.2.6)

#6 楼 @woz24416 貌似 scaffold 没有运行成功啊,没有 users_controller, 也没有 Model: user.rb

重新运行了 脚手架,成功了。

➜  demo_app git:(master) ✗ rails g scaffold User
      invoke  active_record
      create    db/migrate/20140921015229_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  jbuilder_scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
      create      test/controllers/users_controller_test.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      test_unit
      create        test/helpers/users_helper_test.rb
      invoke    jbuilder
       exist      app/views/users
      create      app/views/users/index.json.jbuilder
      create      app/views/users/show.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.js.coffee
      invoke    scss
      create      app/assets/stylesheets/users.css.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss
➜  demo_app git:(master) ✗ rake db:migrate
==  CreateUsers: migrating ====================================================
-- create_table(:users)
   -> 0.0039s
==  CreateUsers: migrated (0.0039s) ===========================================

➜  demo_app git:(master)

@springwq无论如何先谢谢能这么帮助我。但是我这边按照又照做了一遍: 首先,卸载 rails destroy scaffold User name:string email:string invoke active_record remove db/migrate/20140921043156_create_users.rb remove app/models/user.rb invoke test_unit remove test/models/user_test.rb remove test/fixtures/users.yml invoke resource_route route resources :users invoke jbuilder_scaffold_controller remove app/controllers/users_controller.rb invoke erb remove app/views/users remove app/views/users/index.html.erb remove app/views/users/edit.html.erb remove app/views/users/show.html.erb remove app/views/users/new.html.erb remove app/views/users/_form.html.erb invoke test_unit remove test/controllers/users_controller_test.rb invoke helper remove app/helpers/users_helper.rb invoke test_unit remove test/helpers/users_helper_test.rb invoke jbuilder remove app/views/users remove app/views/users/index.json.jbuilder remove app/views/users/show.json.jbuilder invoke assets invoke coffee remove app/assets/javascripts/users.js.coffee invoke scss remove app/assets/stylesheets/users.css.scss invoke scss 然后再安装: $ rails g scaffold User invoke active_record create db/migrate/20140921043341_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml invoke resource_route route resources :users invoke jbuilder_scaffold_controller create app/controllers/users_controller.rb invoke erb create app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb invoke test_unit create test/controllers/users_controller_test.rb invoke helper create app/helpers/users_helper.rb invoke test_unit create test/helpers/users_helper_test.rb invoke jbuilder exist app/views/users create app/views/users/index.json.jbuilder create app/views/users/show.json.jbuilder invoke assets invoke coffee create app/assets/javascripts/users.js.coffee invoke scss create app/assets/stylesheets/users.css.scss invoke scss identical app/assets/stylesheets/scaffolds.css.scss 最后: $ rake db:migrate 还是同样的错误: rake aborted! NoMethodError: undefined method `accept' for nil:NilClass

@@springwq 您先前所说的“貌似 scaffold 没有运行成功啊,没有 users_controller, 也没有 Model: user.rb”我想是不是因为我没有在 github 上传这一部分,现在我有补上了,但正如上面我我说的,我按照您在帖子里面贴出来的重新尝试了 N 次在我的电脑里面依然抱原来的那个错误。

#9 楼 @woz24416 LZ 看的什么教程?我在你的 github 里面 还是没有看到 app/models/user.rbapp/controllers/uers_controller.rb.

有几点建议:

  • 找一本实时更新的教程,比如 Rails Tutorial
  • 学会使用 Github
  • 学会 Markdown
  • 如果 LZ 不是精通 MySQL, 建议初学者使用 SQLite 数据库

再不行,重新新建一个项目吧。

@springwq 您好,这两天有些事情耽误了,感谢您的回复。我在帖子里面贴出的问题就是使用 Ruby on Rails Tutorial 第二版的中文版,原来在 github 中的确是没有上传您说的这两个文件,但在本地都有,现在我已经重新上传到 github 了。不知道能否从上述两个文件中找出问题的所在。感谢帮助!!!

@mysql gem 版本问题。请使用最新的 myqslq2 0.3.11 或者 0.3.16

@springwq 请问之前看到您 ruby rails mysql 的版本是多少呢?

#13 楼 @woz24416

在 Gemfile 中,去掉 mysql2 后面的版本号,然后 删掉 sqlit3 那个代码块,最后 bundle install

再试试看

将下面的代码


gem 'mysql2', '0.2.6'

# Use sqlite3 as the database for Active Record
#gem 'sqlite3'
group :development do
    gem 'sqlite3', '1.3.8'
end

改成:

gem 'mysql2'

一直是这样的配置啊。我正在把 mysql rails 都删除,再重新安装一遍吧 有推荐的版本搭配吗?尤其是 MySQL?谢谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号