简体   繁体   中英

rake db:create gives undefined method `[]' for nil:NilClass error

Postgres 9.3, Ruby 2.1.0

rake db:create isn't making a test database. I already have a production database. I tried using RAILS_ENV=test rake db:create to force it but it returns "test database is not configured.

My database.yml ->

development:
  adapter: postgresql
  database: app_prod
  host: localhost

test: &test
  adapter: postgresql
  database: app_test
  host: localhost

cucumber:
  <<: *test

production:
  adapter: postgresql
  database: app_prod
  host: localhost

So it is configured. I also tried just using a console createdb app_test to create my test database but I receive the same error when I try to run rake db:test:prepare.

Anyone have any ideas?

this is --trace on db:create:all

** Invoke db:create:all (first_time)

** Invoke db:load_config (first_time)

** Execute db:load_config

** Execute db:create:all

rake aborted!
undefined method `[]' for nil:NilClass
/Users/username/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.0.3/lib/active_record/tasks/database_tasks.rb:189:in `block in each_local_configuration'

this is trace on db:test:prepare

** Invoke db:test:prepare (first_time)

** Invoke db:load_config (first_time)

** Execute db:load_config

** Execute db:test:prepare

** Invoke db:test:load (first_time)

** Invoke db:test:purge (first_time)

** Invoke environment (first_time)

** Execute environment

** Invoke db:load_config

** Execute db:test:purge
rake aborted!
undefined method `[]' for nil:NilClass
/Users/username/.rvm/rubies/ruby-2.1.0/lib/ruby/gems/2.1.0/gems/activerecord-4.0.3/lib/active_record/tasks/database_tasks.rb:137:in `purge'

Try running this in console

ActiveRecord::Base.configurations

You should get your database configurations.

Line 3 in this method(Line 189 in github ) is failing in your case because configuration is nil

def each_local_configuration
    ActiveRecord::Base.configurations.each_value do |configuration|
      next unless configuration['database']

      if local_database?(configuration)
        yield configuration
      else
        $stderr.puts "This task only modifies local databases. #{configuration['database']} is on a remote host."
      end
    end
  end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM