代码之家  ›  专栏  ›  技术社区  ›  David Lazar

尝试将ActiveRecord与Sinatra一起使用,迁移失败问题

  •  1
  • David Lazar  · 技术社区  · 16 年前

    运行Sinatra1.0时,我想在程序中添加一个数据库表。在我的耙里我有一个任务

    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 
    

    当调用ActiveRecord::Migrator.Migrate()时,控制台会弹出一个错误。 耙子流产了! nil:nilclass的未定义方法“info”

    迁移代码本身非常简单…并没有任何线索告诉我这个丢失的信息类是什么。

        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
    
    1 回复  |  直到 16 年前
        1
  •  3
  •   timmyc    16 年前

    我刚刚遇到了同样的问题,解决方法是给ActiveRecord一些关于在哪里输出日志信息的信息。

    我在我的rakefile中添加了以下内容

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

    -蒂米