2009-11-12 35 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。

相關問題