неопределенный метод 'info' для nil: NilClass при запуске миграции активной записи - PullRequest
0 голосов
/ 12 ноября 2009

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

неопределенный метод '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

А вот оператор трассировки :

** Вызвать миграцию (первый раз)
** Выполнить миграцию
Рейк отменен!
неопределенный метод info' for nil:NilClass<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :473:in мигрировать '
C: /Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb : 472: в each'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :472:in перенести '
C: /Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb : 400: в up'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/migration.rb :383:in перенести '
E: /Working/Code/WMF/SupporterSync/rakefile.rb: 19
C: /Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb: 636: в 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: в 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: в 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: в run'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31<br /> C:/Ruby/bin/rake:19:in загрузить '
C: / Ruby / bin / rake: 19 < br />

Ответы [ 2 ]

5 голосов
/ 12 ноября 2009

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

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

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

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

1 голос
/ 21 сентября 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...