Ошибка SQLite3 - откат невозможен - транзакция не активна - PullRequest
7 голосов
/ 09 мая 2011

решено (см. Ниже)

Когда я пытаюсь создать или уничтожить запись (запущенную на SQLite3) в моем приложении Ruby on Rails (или в консоли), я получаю исключение SQL:


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">]

Запись сохраняется в базе данных, но также выдает такую ​​ошибку. Я попытался удалить свою БД, затем создать и перенести ее снова, но, похоже, это не принесло пользы.

Буду очень признателен за любые идеи, как это исправить. Я никогда не сталкивался с такой вещью раньше = (

РЕШЕНИЕ

Я уничтожил свою модель и создал другую. Должен быть некоторый конфликт в именах атрибутов, так как новый теперь имеет fp: string contents: text и работает хорошо. Может быть слово хэш , которое разрушило SQLite =) Спасибо вам всем!

Ответы [ 3 ]

9 голосов
/ 23 мая 2011

Святой дым ... Ситуация в том, что имя поля "hash" заставляет sqlite3 выдавать эту очень бесполезную ошибкуХитрый ...

1 голос
/ 30 сентября 2011

Это хорошая идея - никогда не создавать экземплярный метод с именем "hash". Это используется тонной рубиновых объектов для сравнения и равенства. Независимо от того, используете ли вы SQLite или что-то еще, пользовательский метод хеширования должен выполняться только тогда, когда вы знаете, чего вы хотите от его результатов. В этом случае ActiveRecord сделал метод для вас. Я бы переименовал колонку:)

0 голосов
/ 09 мая 2011

Возможно, вам стоит попробовать посмотреть здесь: Сбой тестов Rails с Sqlite3 Похоже, что они могли найти обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...