When it’s ready.

出来るまで出来ない

Ubuntuでのmount cifsの場合。sqlite3が正常に動作しない。

はまった。かなり、はまった。

手元のMacBookでDjangoプロジェクトが完成したので、Ubuntuで動作させるべくファイルサーバーにアップロード。
DB作り直そうとsyncdbしたら全然動かない。

sqlite3.OperationalError: database is locked

こんなエラーがでる。Djangoのドキュメント探しているとこんなの見つけた
https://bitbucket.org/MiCHiLU/django-doc-ja/src/tip/ref/databases.txt

"Database is locked" errors

                                                                                            • -

SQLite is meant to be a lightweight database, and thus can't support a high
level of concurrency. ``OperationalError: database is locked`` errors indicate
that your application is experiencing more concurrency than ``sqlite`` can
handle in default configuration. This error means that one thread or process has
an exclusive lock on the database connection and another thread timed out
waiting for the lock the be released.

なんかよくわかんないけど、問題ありだよと。

* Increase the default timeout value by setting the ``timeout`` database
option option::

DATABASE_OPTIONS = {
# ...
"timeout": 20,
# ...
}

こうすると良いらしいので、早速設定してみた。ワクワクしながら、syncdb

sqlite3.OperationalError: database is locked

はいキターー!否、来てない。来てないよ。
モデル全部書き換えたり、捨てたり、いろいろしたけど、全然動かない。
動かないよ。全然。全く。

さらに、ググってるとこんなの見つけた。
http://omake.accense.com/wiki/TracInstall

Note: Mac OS X のユーザは気を付けて下さい; Apple 社が供給している SQLite は AFP や SMP といったネットワークファイルシステムにおけるファイルのロックを実現するためのコードが含まれています。これは現在の主流ではありませんので、ソースコードから自分で SQLite をビルドする場合、このようなファイルシステムでは正しく動かないでしょう。- たいていの場合、 "database is locked" というエラーがでるでしょう。 アップル社のコードのバージョン 3.3.6 で利用可能な パッチ があります。それ以外では、アップル社が供給しているバージョン (現在 3.1.3) を使用するのがたぶん最良でしょう。

OSはubuntuだし、ファイルサーバはRHLなので全然関係ないとスルーしてたけど、"AFP"という言葉に引っかかった。
LinuxのOSを使っているけど、マウントするときにはCIFS使っているので、コレがわるさしてるかも知れない!
ローカルにファイルを持ってきたら、無事に動きまくり。もうね、もうね、死にたい。

Linuxで、smbでマウントしたsqliteファイルは読み書きに失敗する。(事がある)