【问题标题】:mysql2 driver seems to write invalid queriesmysql2 驱动程序似乎写了无效的查询
【发布时间】:2011-08-09 23:03:28
【问题描述】:

我正在其他人开发的 Rails 应用程序之上开发应用程序层。

他的应用程序使用了一个名为 request_logger 的模块来写入一个表,在 ruby​​1.8/rails2/mysql gem 下运行良好,但是在我的 ruby​​1.9/rails3/mysql2 环境中,activerecord 掉了,提示生成的查询无效。

很明显,所有的mysql关系名称都用双引号而不是反引号括起来。

对activerecord本身的调用只是用

设置了一堆属性
log.attributes = {
    :user_id => user_id,
    :controller => controller,
    ...etc
}

然后调用

log.save

所以我倾向于它不是狡猾的调用。有什么建议吗?

【问题讨论】:

    标签: ruby-on-rails ruby mysql2


    【解决方案1】:

    mysql2 对很多人来说都很好,但是它毫不掩饰地牺牲了对 MySQL C API 的一致性,以实现常见任务的性能。也许,如果 request_logger 足够低级,它期望存在的调用不存在。

    切换回使用mysql 很简单——试一试,如果可行,请坚持使用。请记住更改您的Gemfileconfig/database.yml 设置。

    【讨论】:

      【解决方案2】:

      事实证明,rails 2 和 3 之间的行为似乎发生了变化(我们在 rails 2 中使用相同的设置)

      我们使用 database.yml 指定一个(空的)“主”数据库,然后使用分片+章鱼向我们的客户提供数据。

      为简单起见,主数据库是 sqlite,似乎 activerecord 正在将针对 sqlite 格式化的请求提供给 mysql2 分片,无论它们的适配器类型如何。

      【讨论】:

      • 您在原始问题中遗漏了很多内容。
      • 是的。对此感到抱歉,我对 ruby​​/rails 有点陌生,并且已经陷入困境。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2021-11-23
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多