これらのエラーは、1 人の個人がシステムをテストした場合には発生しません。しかし、jmeter テストを使用すると、次の行に沿っていくつかのエラーをかなり確実に再現できます。
ActiveRecord::JDBCError: SAVEPOINT active_record_1 does not exist: ROLLBACK TO SAVEPOINT active_record_1
Stack:
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:200:in `log'
gems/gems/activerecord-jdbc-adapter-1.2.1/lib/arjdbc/jdbc/adapter.rb:208:in `execute'
gems/gems/activerecord-jdbc-adapter-1.2.1/lib/arjdbc/mysql/adapter.rb:156:in `rollback_to_savepoint'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:179:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:171:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:207:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:290:in `with_transaction_returning_status'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:240:in `save'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:251:in `rollback_active_record_state!'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:239:in `save'
...(our code that simply calls save on a new instance of a model class)...
トランザクションをネストしたり、明示的に使用したりすることはありません。このエラー メッセージに関する既存のバグが 1 つありますが、関連性はありません。切り詰めたり、DDL 作業を行ったりすることはありません。レコードを作成して保存するだけです。
Rails 3.0.10、JRuby 1.6.5、activerecord-jdbcmysql-adapter を使用し、Warbler 1.3.2 でウォーブリングし、単一の Mysql インスタンス v5.1.57 を使用して 64 ビット Tomcat 7/Amazon RDS に Elastic Beanstalk 経由でデプロイします。config.threadsafe の設定が完了しました。- そして、これは ActiveRecord の腸内である種の競争のように感じます - しかし、ActiveRecord はスレッドセーフで動作するはずですよね?
最後に、これは JRuby または Warbler の問題ではないかと心配しています。JRuby から MRI Ruby 1.9 に切り替えると、この問題を再現できないからです。