undefined method 'info' for nil:NilClass when running active record migration
I am trying to run an active record migration but am receiving the following error:
undefined method 'info' for nil:NilClass
Here is the 2 lines of code in my rake task that runs the migration
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 )
And here is my only migration class in the folder
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 =开发者_如何学Python> 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
And here is the trace statement:
** Invoke migrate (first_time)
** Execute migrate rake aborted! undefined methodinfo' 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:ineach'<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:inup'<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:incall'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in
execute' C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:ineach'<br /> C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in
execute' C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:ininvoke_with_call_c hain'<br /> C:/Ruby/lib/ruby/1.8/monitor.rb:242:in
synchronize' C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:ininvoke_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:ininvoke_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:ineach'<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:instandard_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:inrun'<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:inrun'<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
I suggest following Rails' conventions and making your table + field names lowercase_and_underscored rather than CamelCasing. Some macros such as belongs_to look for the lowercase variants and by using them you make your life a lot easier. I'm sorry this does not quite answer your question.
Also, the primary key is "id" by default, so you don't need to set it.
Thirdly, migrations are usually run with rake db:migrate
.
Lastly, the reason you're getting that error is that you're setting up ActiveRecord::Base
and not defining a logger object on it, like Rails does for you when you run any task descending from :environment
. For more information, see this line in the Rails source.
I turned off active_record logger (config.active_record.logger = nil) and came across this problem. I solved it by adding a logger back:
config.active_record.logger=Logger.new(STDOUT)
I added the code to config/environment/xxx.rb.
精彩评论