2009-11-12 58 views
0

我试图运行一个活动记录迁移时,但我收到以下错误:未定义的方法“信息”的零:NilClass运行的活动记录迁移

undefined method 'info' for nil:NilClass

下面是两行代码在我耙运行迁移

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 

这里是跟踪语句

** Invoke migrate (first_time)
** Execute migrate
rake aborted!
undefined method 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 execute'
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 execute'
C:/Ruby/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in invoke_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:in 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:in 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:in 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:in 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

回答

5

我建议以下Rails的约定,使lowercase_and_underscored而不是驼峰规则你的表+字段名。一些宏如belongs_to寻找小写变体,并通过使用它们让您的生活变得更轻松。对不起,这并不能完全回答你的问题。

此外,默认情况下,主键是“ID”,您不需要设置它。

第三,迁移通常与rake db:migrate一起运行。

最后,你得到这个错误的原因是因为你设置了ActiveRecord::Base而没有定义一个记录器对象,就像Rails为你运行任何从:environment降序的任务。有关更多信息,请参阅Rails源文件中的see this line

+0

我实际上使用活动记录迁移.net项目,所以这就是为什么命名约定是不同的。 感谢您帮助我解决问题。它一旦我添加日志记录就起作用了。 – Paul 2009-11-13 00:22:31

+1

你认为你可以发布如何定义记录器对象吗? – 2012-04-27 14:47:18

1

我关掉了active_record记录器(config.active_record.logger = nil),并遇到了这个问题。我通过添加记录器来解决它:

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

我将代码添加到config/environment/xxx.rb。

相关问题