0

我们正在从 1.8.7 升级到 Ruby 1.9.3 并尝试将 Rails 从 3.2.1 更新到 3.2.8 或 9。我们的应用程序适用于 Ruby 1.9.3-p327 和 Rails 3.2.1,但作为当我将 Rails 升级到更高版本时,我开始看到 MySQL 错误:

(0.2ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `orders` (`cancelled_at`, `completed_at`, `created_at`, `customer_id`, `refunded_at`, `updated_at`, `uuid`, `website_id`, `workflow_state`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ?, ?, ?)' at line 1: INSERT INTO `orders` (`cancelled_at`, `completed_at`, `created_at`, `customer_id`, `refunded_at`, `updated_at`, `uuid`, `website_id`, `workflow_state`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
   (0.1ms)  ROLLBACK
Completed 500 Internal Server Error in 194ms

ActiveRecord::StatementInvalid (Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ?, ?, ?)' at line 1: INSERT INTO `orders` (`cancelled_at`, `completed_at`, `created_at`, `customer_id`, `refunded_at`, `updated_at`, `uuid`, `website_id`, `workflow_state`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)):
  app/controllers/search_controller.rb:231:in `build_new_order'
  app/controllers/search_controller.rb:432:in `add_to_cart?'
  app/controllers/search_controller.rb:37:in `new'

我们所做的只是一个基本的:

@order = Order.create! @website

如果我们只是调用 Order.new 或 Order.create 并检查@order 的有效性,它就会通过(@website 也是有效的)。调用 save!,我们得到 MySQL 错误。我们可以运行相同的 Order.create!在控制台中,它通过了!

此外,一旦我们看到错误,那么整个站点都会出错。我们已经看到了 Workflow 的一些问题,并将其“降级”到 0.8.1。我尝试过不同版本的 MySQL2(目前使用 0.3.11)。我尝试过使用 activerecord-mysql2-adapter ,但网站完全崩溃了。我没有尝试过不同版本的 Paper Trail(目前使用 2.6.4),也许我过于专注于模型,因为它可以在控制台中运行。但是,在我们尝试向购物车中添加一些东西并创建订单之前,控制器确实可以工作。

搜索 web、rails 网站、工作流、mysql2 和堆栈溢出没有发现任何东西。

有没有其他人遇到过类似的事情?任何其他建议将不胜感激。谢谢!

编辑:

3.2.2 的发行说明说“查询缓存检测包括有效负载中的绑定”。所以我搜索了“缓存检测”并找到了这个:

https://github.com/orslumen/record-cache/issues/21

4

1 回答 1

0

删除记录缓存后,一切都按预期工作。我们只在一个模型上使用它,所以我们没有损失太多性能。奇怪的是,它不在我们的 Order 模型上,而是在我们的 Product 模型上。

于 2012-12-13T06:07:21.637 回答