SQLite3 错误 - 无法回滚 - 没有活动的事务 [英] SQLite3 Error - cannot rollback - no transaction is active
问题描述
已解决(见下文)
当我尝试在我的 Ruby on Rails 应用程序(或控制台)中创建或销毁记录(在 SQLite3 上运行)时,我收到 SQL 异常:
<预><代码>irb(主):014:0>ApiCache.all=>[]irb(主):015:0>ApiCache.create(:hash => 'qwe', :contents => 'asd')SQLite3::SQLException: 无法回滚 - 没有活动的事务来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite3/database.rb:97:在`关闭'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite3/database.rb:97:在`准备'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite3/database.rb:134:在`执行'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/sqlite3-1.3.3-x86-mingw32/lib/sqlite3/database.rb:517:在`回滚'来自 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'来自 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'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/transactions.rb:207:在‘交易’中来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/transactions.rb:290:在`with_transaction_returning_status'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/transactions.rb:240:在`保存'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/transactions.rb:251:在`rollback_active_record_state!'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/transactions.rb:239:在`保存'来自 C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.6/lib/active_record/base.rb:498:在`创建'来自 (irb):15来自:0irb(主):016:0>ApiCache.all=>[#<ApiCache id: 9, hash: "qwe", contents: "asd", created_at: "2011-05-09 13:09:31", updated_at: "2011-05-09 13:09:31">]记录保存到数据库中但也抛出这种错误.我试图删除我的数据库,然后再次创建和迁移它,但它似乎没有任何好处.
我非常感谢任何有关如何修复它的想法.我以前从来没有遇到过这样的事情=(
解决方案
我已经销毁了我的模型并创建了另一个模型.属性名称肯定存在一些冲突,因为新的属性名称现在具有 fp:string contents:text 并且运行良好.可能是 hash 这个词毁了 SQLite =) 谢谢你们!
天啊…… 实际情况是字段名hash"导致 sqlite3 抛出这个非常无用的错误.棘手的...
SOLVED (see below)
When I'm trying to create or destroy a record (running on SQLite3) in my Ruby on Rails app (or in console as well) I'm getting an SQL Exception:
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
=> [#<ApiCache id: 9, hash: "qwe", contents: "asd", created_at: "2011-05-09 13:09:31", updated_at: "
2011-05-09 13:09:31">]
The record saves into the database but also throws this kind of error. I tried to delete my DB then create and migrate it again, but it doesn't appear to make any good.
I would really appreciate any ideas on how to fix it. I've never faced such thing before =(
SOLUTION
I've destroyed my model and created another one. Must be some conflict in attribute names, as the new one now has fp:string contents:text and works nicely. Might be the word hash that ruined SQLite =) Thank y'all!
Holy smokes... The situation is in-fact that the field name "hash" causes sqlite3 to throw this very unhelpful error. Tricky one...
这篇关于SQLite3 错误 - 无法回滚 - 没有活动的事务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!