我们正在从 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 的发行说明说“查询缓存检测包括有效负载中的绑定”。所以我搜索了“缓存检测”并找到了这个: