【问题标题】:Can't run "rake test" after dropping a table删除表后无法运行“rake test”
【发布时间】:2014-09-09 09:21:04
【问题描述】:

在我最近的一个迁移文件中,我删除了一个很久以前创建的表 (drop_table :transactions)

从那时起,“rake 测试”失败了

ActiveRecord::StatementInvalid: PG::Error: ERROR:  relation "transactions" does not exist
LINE 1: DELETE FROM "transactions"
^
: DELETE FROM "transactions"
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `async_exec'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `exec_no_cache'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:671:in `block in exec_delete'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:670:in `exec_delete'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:101:in `delete'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `delete'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:497:in `block (4 levels) in create_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:496:in `each'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:496:in `block (3 levels) in create_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:492:in `each'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:492:in `block (2 levels) in create_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:491:in `block in create_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:523:in `disable_referential_integrity'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:476:in `create_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:895:in `load_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activerecord-3.2.13/lib/active_record/fixtures.rb:849:in `setup_fixtures'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:407:in `_run__291023375__setup__979454852__callbacks'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `__run_callback'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:385:in `_run_setup_callbacks'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `run_callbacks'
C:/Ruby/1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/testing/setup_and_teardown.rb:35:in `run'

我在整个应用程序中没有提及交易(除了迁移文件)。

它在开发和生产环境中运行良好,只是测试失败了。

我尝试了 rake db:test:prepare 但它已经在 rake 测试后运行。我在运行我的 rake 测试之前删除了测试数据库,重新创建了数据库,但发生了同样的错误。

知道在哪里查看/如何修复它以便我可以再次运行测试吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2


    【解决方案1】:

    stacktrace 正在调用fixtures 创建的方法。

    请检查您的所有灯具以检查是否与transation 型号无关。用grep就OK了

    【讨论】:

    • 无赖!我有一个空文件 transactions.yml。里面什么都没有...很好,谢谢!
    【解决方案2】:

    首先验证transactions表在所有三个db中都不存在(dev,pro,test) 如果这已经完成,您需要运行 rake db:migrate更新您的 schema.rb .我相信transactions 表仍然存在于schema.rb 中,也需要更新。

    【讨论】:

    • 不,它不在我的架构中,也不在测试数据库中。
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2016-02-22
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多