Undefined метод 'info' для nil: NilClass при запуске миграции активной записи

Я пытаюсь запустить активный перенос записи, но получаю следующую ошибку:

undefined метод 'info' для nil: NilClass

Вот две строки кода в моей задаче rake, в которой выполняется миграция

ActiveRecord::Base.establish_connection(YAML::load(File.open('src/SupporterSync.Core/Database/Database.yml')))
ActiveRecord::Migrator.migrate('src/SupporterSync.Core/Database/Migrations', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )

И вот мой единственный класс миграции в папке

class InitialMigration < ActiveRecord::Migration
  def self.up
    create_table :Accounts, :primary_key => :Id do |t|
      t.string :ListId, :limit => 36, :null => false
      t.string :Name, :limit => 31, :null => false
      t.string :FullName, :limit => 31, :null => false
      t.string :ParentListId, :limit => 36
    end
  end
  def self.down
    drop_table :Accounts
  end
end

И вот инструкция трассировки:

** Вызов migrate (first_time)
** Выполнение миграции
rake aborted!
undefined метод info' for nil:NilClass<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :473:in migrate '
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb: 472: in each'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :472:in migrate '
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb: 400: in up'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :383:in migrate '
E:/Working/Code/WMF/SupporterSync/rakefile.rb: 19
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 636: in call'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in выполнить '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 631: in each'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in выполнить '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 597: в invoke_with_call_c hain'<br /> C:/Ruby/lib/ruby/1.8/monitor.rb:242:in синхронизировать '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 590: в invoke_with_call_c hain'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in invoke '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 2051: в invoke_task'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in top_level '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 2029: в each'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in top_level '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 2068: в standard_exceptio n_handling'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in top_level '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 2001: in run'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in standard_exceptio n_handling '
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 1998: in run'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31<br /> C:/Ruby/bin/rake:19:in load '
C:/Ruby/bin/rake: 19 < br/" >

Ответ 1

Я предлагаю следующие соглашения Rails и делать ваши таблицы + имена полей lowercase_and_underscored, а не CamelCasing. Некоторые макросы, такие как belongs_, ищут варианты нижнего регистра, и, используя их, вы делаете свою жизнь намного проще. Мне жаль, что это не совсем ответит на ваш вопрос.

Кроме того, по умолчанию первичный ключ является "id", вам не нужно его устанавливать.

В-третьих, миграции обычно выполняются с помощью rake db:migrate.

Наконец, причина, по которой вы получаете эту ошибку, связана с тем, что вы настраиваете ActiveRecord::Base и не определяете на ней объект журнала, например Rails для вас, когда вы запускаете любую задачу, спускающуюся с :environment. Для получения дополнительной информации см. Эту строку в источнике Rails.

Ответ 2

Я отключил регистратор active_record (config.active_record.logger = nil) и столкнулся с этой проблемой. Я решил это, добавив регистратор назад:

config.active_record.logger=Logger.new(STDOUT)

Я добавил код в config/environment/xxx.rb.