現在、Ruby 1.8.7 から 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 を実行できます。コンソールで、それは合格です!!
また、エラーが表示されると、サイト全体でエラーが発生します。ワークフローにいくつかの問題が見られたため、ワークフローを 0.8.1 に「ダウングレード」しました。MySQL2 のさまざまなバージョンを試しました (現在は 0.3.11 を使用しています)。代わりに activerecord-mysql2-adapter を使用してみましたが、サイトが完全に壊れてしまいました。Paper Trail の別のバージョン (現在は 2.6.4 を使用) は試していませんが、コンソールで動作するため、モデルに集中しすぎている可能性があります。ただし、カートに何かを追加して Order を作成するまでは、コントローラーは機能します。
Web、Rails Web サイト、ワークフロー、mysql2、およびスタック オーバーフローを検索しても、何も見つかりませんでした。
他の誰かが似たようなことに遭遇しましたか? 他の提案をいただければ幸いです。ありがとう!
編集:
3.2.2 のリリース ノートには、「クエリ キャッシュ インストルメンテーションにはペイロードにバインディングが含まれる」と記載されています。だから私は「キャッシュインストルメンテーション」を検索し、これを見つけました: