sqlite データベースに接続するバニラ python があります。
デーモンとして実行しようとするまで、すべて正常に動作します。これを行うために使用しているコードは次のとおりです。
def start(self):
if self.lockfile.is_locked():
exit_with_code(7, self.pid_file)
# If we're running in debug, run in the foreground, else daemonise
if self.options['debug']:
try:
self.main()
except KeyboardInterrupt:
pass
finally:
self.close_gracefully()
else:
context = daemon.DaemonContext(
files_preserve = [self.logger.socket(), self.lockfile]
)
context.signal_map = {
signal.SIGTERM: self.close_gracefully
}
with context: self.main()
フォアグラウンドで実行できpython -m starter -debug
、すべて問題ありません。アプリはデータベースに書き込みますが、デバッグフラグをオフのままにすると、書き込もうとすると次のように表示されます。
no such table: Frontends
データベースを開いたので、frontends テーブルが存在することはわかっています。そうしないと、まったく異なるエラーメッセージが表示されるため、pythonがデータベースを見つけていると思います。
すべてのファイルは vagrant が所有してls -l
おり、次のように表示されます。
-rwxrwxrwx 1 vagrant vagrant 9216 Nov 9 18:09 development.sqlite
ヒントはありますか?
アップデート
要求に応じて、これが私のデータベースのコードです
import os
import sqlite3
class Database(object):
def __init__(self, db_file='/vagrant/my_daemon/db/development.sqlite'):
self.db = sqlite3.connect(db_file)
if os.path.exists(db_file):
print "db exists"
これを実行すると、「db exists」と出力されます。への呼び出しを使用して、starter.py でデータベースをインスタンス化しますDatabase()
。