我想使用 zeus (0.13.3) 为 ruby 2.0.0 上的 rails (3.2.11) 应用程序预加载我的 rails 环境,并使用 database_cleaner (0.9.1) 清理数据库。只要我只使用一个 mysql 数据库,它就可以正常工作。在应用程序中,我们必须使用两个不同的 mysql 数据库。 编辑:需要提到的是,我使用了这里描述的共享连接黑客。
在不使用 zeus 的情况下运行我的规范就像预期的那样工作。但是,如果我使用它,每次测试都会在创建错误记录的那一刻失败:
undefined method `query_options' for nil:NilClass
如何解决?
设置是这样的:
config/database.yml
test:
database: app_test
...
test_second_db:
database: other_test
...
在使用第二个连接的所有模型的抽象基类中,我们做
models/second_db/base.rb
module SecondDB
class Base < ActiveRecord::Base
establish_connection "#{Rails.env}_second_db"
self.abstract_class = true
end
end
在我的 spec_helper.rb 文件中,我设置了 database_cleaner:
spec/spec_helper.rb
require 'database_cleaner'
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_second_db}].strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
DatabaseCleaner[:active_record,{:connection => :test_second_db}].start
end
config.after(:each) do
DatabaseCleaner.clean
DatabaseCleaner[:active_record,{:connection => :test_second_db}].clean
end
end
编辑:
spec/support/shared_connection.rb
class ActiveRecord::Base
mattr_accessor :shared_connection
@@shared_connection = nil
def self.connection
@@shared_connection || retrieve_connection
end
end
规范/支持/shared_connection.rb