【问题标题】:rake test prepare: NoMethodError: undefined method `[]' for nil:NilClassrake test prepare: NoMethodError: undefined method `[]' for nil:NilClass
【发布时间】:2016-01-02 04:02:02
【问题描述】:

我在运行 rake db:test:prepare 时总是收到以下错误。什么会导致这个? rake db:create 工作正常。

 Adam-MacBook-Pro:katy adam$ bundle exec rake db:test:prepare
    rake aborted!
    NoMethodError: undefined method `[]' for nil:NilClass
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:163:in `purge'
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:356:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:362:in `block (3 levels) in <top (required)>'
    /Users/adam/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
    /Users/adam/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'

数据库.yml

<%= Rails.env %>:
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV['DB_POOL'] || 5 %>
  username: <%= ENV['DB_USER'] || 'root' %>
  password: <%= ENV['DB_PASSWORD'] || nil %>
  timeout: <%= ENV['DB_TIMEOUT'] || 5000 %>
  host: <%= ENV['DB_HOST'] || 'localhost' %>
  port: <%= ENV['DB_PORT'] || 3306 %>
  database: <%= ENV['DB_NAME'] || "website#{Rails.env}" %>

【问题讨论】:

  • 能否请您发布您的 database.yml 文件的内容?
  • 好的,我已经更新了问题

标签: ruby-on-rails ruby rake minitest


【解决方案1】:

尝试在运行 rake 命令时指定RAILS_ENV

RAILS_ENV=test bundle exec rake db:test:prepare

【讨论】:

  • 非常感谢兄弟,但是为什么没有'RAILS_ENV="test"'就不能工作,据我所知,我真的不必指定
  • 显然,您的 RAILS_ENVnil 用于该 rake 任务。如果您已经有类似的内容,通常不需要指定 RAILS_ENVENV['RAILS_ENV'] ||= 'test' 在您的 spec_helper.rb 文件中。
  • 因为默认情况下,rails 在开发中开始,而不是在测试中。
【解决方案2】:

参考这可能是同一个问题rake db:test:load, undefined method `[]' for nil:NilClass

或者试试这个

RAILS_ENV=test rake db:setup

【讨论】:

  • thnks,我稍后也会尝试,但上面的答案解决了我的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2016-08-13
  • 1970-01-01
  • 2012-08-08
  • 2014-09-05
相关资源
最近更新 更多