【问题标题】:Rails - rake test failsRails - rake 测试失败
【发布时间】:2013-02-24 00:41:35
【问题描述】:

使用以下语句:

rails generate scaffold Product title:string description:text image_url:string price:decimal

并稍微编辑生成的迁移,我得到了以下迁移:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :title
      t.text :description
      t.string :image_url
      t.decimal :price, precision: 8, scale: 2

      t.timestamps
    end
  end
end

之后,我成功运行了以下命令:

rake db:migrate

并连接到我的数据库并检查该表是否已创建。然后,我运行

rake test

并得到了很多错误,我认为问题的根源是 rails 无法找到“产品”表:

 1) Error:
test_should_create_product(ProductsControllerTest):
ActiveRecord::JDBCError: Table products does not exist
    arjdbc/jdbc/RubyJdbcConnection.java:115:in `columns'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-jdbc-adapter-1.2.7/lib/arjdbc/db2/adapter.rb:514:in `columns'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:660:in `column_names'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:651:in `timestamp_column_names'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:585:in `table_rows'
    org/jruby/RubyHash.java:1257:in `each'
    org/jruby/RubyEnumerable.java:718:in `map'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:579:in `table_rows'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:494:in `create_fixtures'
    org/jruby/RubyArray.java:1613:in `each'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:492:in `create_fixtures'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:491:in `create_fixtures'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract_adapter.rb:168:in `disable_referential_integrity'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:476:in `create_fixtures'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:895:in `load_fixtures'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activerecord-3.2.12/lib/active_record/fixtures.rb:849:in `setup_fixtures'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:432:in `_run__858744690__setup__1004892786__callbacks'
    org/jruby/RubyBasicObject.java:1659:in `__send__'
    org/jruby/RubyKernel.java:2086:in `send'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:405:in `__run_callback'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:390:in `_run_setup_callbacks'
    org/jruby/RubyBasicObject.java:1659:in `__send__'
    org/jruby/RubyKernel.java:2086:in `send'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activesupport-3.2.12/lib/active_support/callbacks.rb:81:in `run_callbacks'
    /home/gotqn/.rvm/gems/jruby-1.7.2/gems/activesupport-3.2.12/lib/active_support/testing/setup_and_teardown.rb:35:in `run'

据我了解,在进行测试时,我的“测试”数据库被删除,“开发”数据库的迁移适用于它。因为,我使用的是“IBM DB2 Express 10.1”数据库,所以我想我需要对负责测试的文件进行一些更改。

你能帮我解决这个问题吗?

下面,我展示了更多关于整个情况的信息:

  1. 使用“IBM DB2 Express”10.1 版
  2. 使用 jRuby 1.7.2
  3. 使用 Rails 版本 3.2.12
  4. 使用 Ubuntu 10.04 LTC
  5. 这就是我的“database.yml”文件的样子:
development:
    adapter: jdbc
    driver: com.ibm.db2.jcc.DB2Driver
    url: jdbc:db2://localhost:50000/ddevelop
    host: localhost
    port: 50000
    database: ddevelop
    username: db2inst1
    password: pass

test:
    adapter: jdbc
    driver: com.ibm.db2.jcc.DB2Driver
    url: jdbc:db2://localhost:50000/dtest
    host: localhost
    port: 50000
    database: dtest
    username: db2inst1
    password: pass

注意:“dtest”数据库已经创建。

【问题讨论】:

    标签: ruby-on-rails-3 db2 rake jruby


    【解决方案1】:

    测试数据库尚未更新。您需要在rake db:migration 之后运行rake db:test:prepare。您现在可以运行它,然后重试。

    【讨论】:

    • 我得到以下行:“'jdbc'不支持任务”。你能给点建议吗?
    • @gotqn,我没有使用 JDBC 的 Rails 经验。但错误似乎与数据库适配器有关。您是否安装了适配器 gem?喜欢kenai.com/projects/activerecord-jdbc/pages/Home
    • 是的,我在运行服务器和使用开发数据库时没有任何问题(例如添加记录或列出记录)。这个问题是在测试中出现的。
    • 随便看了一下,可能需要运行`$ jruby script/generate jdbc',查看blog.nicksieger.com/articles/2009/10/12/…
    • 实际上在github.com/jruby/activerecord-jdbc-adapter 文档中,您可以看到这仅适用于Rails 2。无论如何,我的“jdbc” gem 存在问题是完全正确的。我的 gemfile 中没有包含“gem 'activerecord-jdbc-adapter'”,这解决了这个问题。剩下的,也许有人来回答为什么我能够在不包含 gem 的情况下使用开发数据库。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2015-05-27
    • 2012-12-09
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多