【发布时间】:2014-11-09 18:23:04
【问题描述】:
我有一个连接到 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() 来实例化数据库。
【问题讨论】:
-
您的假设很可能是错误的。显示尝试打开数据库的代码。
-
@CL 我更新了我的答案。
-
这两个文件名哪个是正确的?
-
@CL 正确的文件名是 development.sqlite,我更新了问题
-
我认为这可能是 vagrant/puppet 的问题,因为我在 syslog 中找到以下内容:
Nov 9 20:44:26 puppet-agent[1402]: Did not receive certificate,并且我开始认为我的包无法正确安装。我要一个全新的虚拟机。
标签: python sqlite python-daemon