【问题标题】:Active Record error to create databaseActive Record 创建数据库时出错
【发布时间】:2015-07-03 14:45:10
【问题描述】:

在我的 spec/rails_helper.rb 中,如果它不退出,我有下面的代码来创建测试数据库。

def database_exists?
  ActiveRecord::Base.connection rescue ActiveRecord::NoDatabaseError ? false : true
end
unless database_exists?
  ActiveRecord::Base.establish_connection(:"#{ENV['RAILS_ENV']}")
  db_config = ActiveRecord::Base.configurations[ENV['RAILS_ENV']]
  ActiveRecord::Base.connection.create_database db_config
end

但在调用 rspec 时出现此错误:

.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:23:in `rescue in mysql2_connection': 未知数据库 'my-db-test' (ActiveRecord::NoDatabaseError)

问题出在哪里?

如果我使用 system('rake db:create'),它可以工作,但这是一个好习惯吗?

【问题讨论】:

    标签: ruby-on-rails ruby activerecord rspec rspec-rails


    【解决方案1】:

    数据库不存在所以为了避免错误你可以运行:

    rake db:create
    

    或者你可以运行:

    rake db:setup
    

    这将创建数据库并运行迁移文件。

    【讨论】:

    • 如何在测试运行时以编程方式自动完成?
    • 对于 Rails 4.1+,您可以在 spec/rails_helper.rb 文件中包含 ActiveRecord::Migration.maintain_test_schema!。这会自动将您的测试数据库与您的模式同步。您也可以尝试在旧版本的 Rails 中运行 rake db:test:prepare 以使用当前模式克隆测试数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多