DatabaseCleaner with Resque

时间:2011-08-12 14:38:06

标签: ruby-on-rails activerecord resque

有一个奇怪的问题,我找不到任何地址。

我在项目中使用ResqueDatabaseCleaner来清理测试。我们的测试套件需要实际使用常规的resque / redis(所以我们不能使用monkeypatching ResqueSpec,因为它通过使用Resque / Redis来实现)。

我们一直在尝试使用DBCleaner的:transaction策略,但是因为Resque产生了自己的ActiveRecord连接after_fork(参见下面的代码),所以事务不起作用,因为mysql只允许在一个事件上看到事务。单一连接。

Resque这样做:

Resque.after_fork { ActiveRecord::Base.establish_connection if defined?(ActiveRecord) }

简单的解决方案是使用带有:truncation策略的DB清理程序。我们希望只有在使用Resque时才能启用:truncation,然后在运行不相关的规范时返回:transaction

部分技巧是我们的Resque工作人员在规范期间启动并运行。它在测试规范启动时启动一个worker,然后在@resque标记的规范通过一组Before / After挂钩运行后暂停工作进程。

所以问题是我们如何让DatabaseCleaner有效地切换所有活动的ActiveRecord数据库连接以使用正确的清理策略? DatabaseCleaner提供了针对不同规范切换策略的方法,但它似乎没有切换到所有连接,而只是切换到主Rails进程AR连接。

同样,现在的解决方案是到处使用:truncation。只是想知道是否有人对如何解决这个问题有任何想法。

0 个答案:

没有答案
相关问题