2010-05-31 45 views
1

运行Sinatra 1.0,我想添加一个数据库表到我的程序。在我的Rakefile我有一个任务试图使用ActiveRecord与Sinatra,迁移失败问题

task :environment do 
    ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml'))["development"])  
end 

我有我的命名空间迁移任务调用迁移代码:

namespace :related_products do 
     desc "run any migrations we may have in db/migrate" 
     task :migrate => :environment do 
     ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil) 
    end 

我的控制台pukes了一个错误,当调用的ActiveRecord ::迁移。 migrate()被创建。 rake中止! 未定义的方法'info'为零:NilClass

迁移代码本身非常简单...并且没有提示我这个缺失的信息类是什么线索。

class CreateStores < ActiveRecord::Migration 
     def self.up  
     create_table :stores do |t| 
      t.string :name 
      t.string :access_url 
      t.timestamps 
     end 
     end 

     def self.down 
     drop_table :stores 
     end 
    end 

我在这里有点神秘,正在寻找一些线索,看看可能是错的。谢谢!

简单回溯显示了进攻线仅仅是调用迁移:

rake aborted! 
undefined method `info' for nil:NilClass 
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:473:in `migrate' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:472:in `each' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:472:in `migrate' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:400:in `up' 
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.5/lib/active_record/migration.rb:383:in `migrate' 
/Users/baz/Documents/workspace/rp/Rakefile:26 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain' 
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run' 
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/bin/rake:31 
/usr/bin/rake:19:in `load' 
/usr/bin/rake:19 
+0

我们能看到一个回溯?相关行似乎不在代码中提供... – Matchu 2010-05-31 00:22:18

+0

我添加了我得到的回溯。第26行只是调用ActiveRecord :: Migrator.migrate – 2010-05-31 00:43:36

回答

3

我只是碰到了同样的问题,并修复是给ActiveRecord的在哪里输出日志信息的一些信息。

添加以下到我的Rake文件

ActiveRecord::Base.logger = Logger.new(STDOUT) 
ActiveRecord::Migration.verbose = true 

-Timmy

+0

我确实有一些问题(Heroku/Sinatra/AR),并且此解决方案完美运行。谢谢! – 2010-07-06 12:34:14

+0

谢谢你。很高兴有这样一个问题解决。 – 2010-07-10 03:38:15