我有一个连接到 sqlite 数据库的 vanilla 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()
.