SQLite3错误 – 无法回滚 – 没有事务处于活动状态

已解决(见下文)

当我试图在我的Ruby on Rails应用程序(或在控制台中)创建或销毁记录(在SQLite3上运行)时,我得到一个SQLexception:

irb(main):014:0> ApiCache.all => [] irb(main):015:0> ApiCache.create(:hash => 'qwe', :contents => 'asd') SQLite3::SQLException: cannot rollback - no transaction is active from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite 3/database.rb:97:in `close' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite 3/database.rb:97:in `prepare' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite 3/database.rb:134:in `execute' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite 3/database.rb:517:in `rollback' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /connection_adapters/sqlite_adapter.rb:168:in `rollback_db_transaction' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /connection_adapters/abstract/database_statements.rb:176:in `transaction' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /transactions.rb:207:in `transaction' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /transactions.rb:290:in `with_transaction_returning_status' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /transactions.rb:240:in `save' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /transactions.rb:251:in `rollback_active_record_state!' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /transactions.rb:239:in `save' from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record /base.rb:498:in `create' from (irb):15 from :0 irb(main):016:0> ApiCache.all => [#] 

记录保存到数据库中,但也会抛出此类错误。 我试图删除我的数据库然后再次创建和迁移它,但它似乎没有任何好处。

我真的很感激有关如何修复它的任何想法。 我以前从未遇到过这样的事情=(

我摧毁了我的模型并创建了另一个模型。 必须在属性名称中有一些冲突,因为新的现在有fp:string contents:text并且工作得很好。 可能是破坏SQLite的词哈希 =)谢谢你们!

神圣抽烟……实际情况是,字段名称“hash”会导致sqlite3抛出这个非常无用的错误。 棘手的……

永远不要创建名为“hash”的实例方法是个好主意。 这被大量的ruby物体用于比较和平等。 无论天气如何使用SQLite,或者任何事情,只有当您知道自己想要的结果时,才应该使用自定义哈希方法。 在这种情况下,ActiveRecord为您制作了该方法。 我会重命名列:)

也许你应该试着看看这里: Rails测试失败Sqlite3看起来他们可能找到了一个解决方法。