【问题标题】:switching adapters in rails and generated sql在 rails 和生成的 sql 中切换适配器
【发布时间】:2012-03-15 03:04:34
【问题描述】:

我正在写multi-tenancy gem for rails

我的测试现在为特定适配器建立连接,运行一些测试,然后为后续的数据库适配器重复。

然而,我的问题是当我打电话时:

ActiveRecord::Base.establish_connection

使用不同的适配器,从它生成的sql仍然是旧适配器的形式。例如,我运行 mysql 测试,然后尝试运行 postgresql 测试。我收到一个错误:

Failure/Error: subject.create(database1)
ActiveRecord::StatementInvalid:
  PGError: ERROR:  syntax error at or near "."
  LINE 1: SELECT  `users`.* FROM `users` WHERE `users`.`name` = 'Some ...
                         ^
  : SELECT  `users`.* FROM `users` WHERE `users`.`name` = 'Some User 0' LIMIT 1

这里很明显,它使用的是 mysql 反斜杠语法,这在 postgresql 中是无效的。

那么...有人知道如何正确地与不同的适配器建立连接吗?我试过了:

ActiveRecord::Base.connection.reconnect!
ActiveRecord::Base.clear_all_connections!

这些都没有解决我的测试问题。非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails activerecord multi-tenant


    【解决方案1】:

    看看有没有帮助

      ActiveRecord::Base.send(:subclasses).each do |model|
         model.connection.clear_query_cache
      end
    

    【讨论】:

    • 哦,太好了...所以事实证明,无论如何,这在 Rails 3.2 中已修复。我想我应该记下这一点。如果我有机会(或有兴趣),我可能会在我的 rails 3.0.x 分支上尝试这个,但不确定何时可以使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多