sqlite3“OperationalError:无法在python中打开数据库文件”只有当我在apache2或nginx中部署我的烧瓶应用程序时

时间:2015-02-17 17:33:31

标签: sqlite flask web-deployment

我在使用sqlite3数据库的flask中创建了一个应用程序。当我使用Flask的内部测试服务器运行它时,该应用程序完美无缺。但是,当我尝试部署我的应用程序时,使用apache2或gunicorn + nginx,以及我正在使用的任何服务器的日志显示“OperationalError:无法打开数据库文件”。

以下是导致错误的完整文件:

import sqlite3

__all__ = ['Database']

class Database(object):

    def __init__(self, name):
        self._name = name

    def _execute(self, command, args=None):
        connection = sqlite3.connect(self._name)
        cursor = connection.cursor()

        if args is None:
            out = cursor.execute(command).fetchall()
        else:
            out = cursor.execute(command, args).fetchall()

        connection.commit()
        connection.close()
        return out

connection = sqlite3.connect(self._name)是实际触发错误的行,我不知道为什么。我已经尝试用硬编码的字符串替换self._name到数据库的路径无济于事。我还确保数据库文件具有正确的读写权限。

有谁知道我怎么知道发生了什么?

1 个答案:

答案 0 :(得分:2)

编辑确保启动该流程的用户也对sqlite的父文件夹具有写入权限。


有关如何部署的更多细节会很好。您使用fabric进行部署吗?

如果这样做,请检查您用于部署文件的用户是否具有权限。在结构中,即您存储在 env.user 中的用户。使用同一个用户启动gunicorn服务器也有权限。

您可以按照此example获取烧瓶应用的简单部署脚本。