0

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()

4

1 に答える 1