SQLite3が突然create/updateエラーを吐き出したら...
このブログは、DBにSQLite3を使っているのですが、ある日突然DBへの書き込み時に以下のようなエラーが出るようになりました。
A ActiveRecord::StatementInvalid occurred in ...(中略)...:
SQLite3::SQLException: attempt to write a readonly database: ...(中略)...
/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract_adapter.rb:147:in `log'
つい5分前までは、書き込みができていたのに、突然のエラー。
試しに、script/consoleでARオブジェクトを操作しようとしても、script/dbconsoleでSQLite3用のコンソールからカラムの操作をしようとしても、反応なし。
同じ問題で悩んでいる人がいるかもしれないので、原因と対策方法を書いておきます。
1. バイナリファイルを、手元で読み込んでみる
まずは、DBファイル側の問題なのか、それ以外の問題なのかを明らかにしたかったので、サーバーのDBファイルをローカルにダウンロード。
script/consoleも、script/dbconsoleも、きちんと動きました。
でも、ここの切り分けを素直に受け止めた(DBファイル側の問題じゃない)事こそが、悪夢の始まりでした……。
2. ローカルとサーバーの環境をチェック
Rubyのバージョンやgemでインストールしている諸々のバージョンをチェックしても、差違が全くなく。
八方手詰まりになった所で、もしかしたらと思い、サーバーとクライアント双方のSQLiteのバージョンをチェックしたところ、
サーバー ... SQLite3 3.3.6
ローカル ... SQLite3 3.6.4
という衝撃の事実が。
(さらりと書いてますが、ここに至るまでに3時間くらいかかった)
3.結論
SQLite3 3.3.6は、何らかのタイミングでdbファイルを読み書き出来なくなることがあるみたいです。
※ちなみに、僕の契約している「使えるねっと」では、初期インストールされているSQLite3のバージョンが3.3.6でした。
SQLiteを使ったアプリで、直前まで正常に動作していたのに、何故か突然DB周りでエラーが出たときは、SQLiteのマイナーバージョンアップを試してみると良いです。
Ruby, Rails, SQLite3, SQLException |
comments(0) |
trackbacks(0)
2008.11.28 Fri 19:42
TRACKBACKS
この記事へのトラックバックURL: http://www.red-mount.com/trackback/14_b6ee4f4cc4e2cf34a47fab4a03a17cbdf50597ab
ABOUT ME
tak (Takahito Sezutsu)
コメント、トラックバックはお気軽に!
COMMENTS
-
Beanstalk - WEBで管理可能なフリーのSubversionサーバー
→LILAC (08.14) -
CSS Nite in Ginza Vol.29に行ってきました。
→Betsy (05.14) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→poo (04.19) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→tak (06.22) -
「オリジナルの項目が見つからなかったので、エイリアス“********”は開けません。」と出て、Finderで外付けHDDが開けない時は
→ko (06.22) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→Mac (05.06) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tak (03.11) -
MacのSkypeでログイン時プルダウンメニューに表示されるSkype名を消す方法
→tama (03.11) -
Mac版ATOK定額制(体験版)を1週間使ってみた
→tak (09.19)
COMMENTS