【问题标题】:Flask: OperationalError: unable to open database fileFlask:OperationalError:无法打开数据库文件
【发布时间】:2018-02-22 20:03:54
【问题描述】:

我在尝试让 Flask 应用程序的数据库正常工作时遇到了巨大的困难。我正在遵循 Flask 中的示例教程,并通过 Amazon EC2 实例将我的站点部署在 Apache 服务器上。我访问该站点没有任何困难,但是每当我尝试发布到数据库时,我都会收到 500 内部服务器错误。检查error.log显示:

[Wed Sep 13 19:37:47.713249 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492] [2017-09-13 19:37:47,712] ERROR in app: Exception on /add [POST], referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713291 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492] Traceback (most recent call last):, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713294 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1982, in wsgi_app, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713296 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     response = self.full_dispatch_request(), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713299 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1614, in full_dispatch_request, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713301 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     rv = self.handle_user_exception(e), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713304 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1517, in handle_user_exception, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713306 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     reraise(exc_type, exc_value, tb), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713308 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1612, in full_dispatch_request, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713310 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     rv = self.dispatch_request(), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713312 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1598, in dispatch_request, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713314 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     return self.view_functions[rule.endpoint](**req.view_args), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713330 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]   File "/var/www/FlaskApp/FlaskApp/FlaskApp.py", line 76, in add_entry, referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713333 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492]     [request.form['title'], request.form['text']]), referer: http://www.zachflask.tk/
[Wed Sep 13 19:37:47.713334 2017] [wsgi:error] [pid 27587] [client 209.54.86.83:50492] OperationalError: unable to open database file, referer: http://www.zachflask.tk/

我认为这可能与我的文件权限有关,但我chmod 777 FlaskApp.db 没有任何结果。

zld6fd@vanadium:/var/www/FlaskApp/FlaskApp$ ls -la
total 44
drwxr-xr-x 5 zld6fd zld6fd 4096 Sep 13 19:45 .
drwxr-xr-x 6 zld6fd zld6fd 4096 Sep 13 19:37 ..
-rwxrwxrwx 1 zld6fd zld6fd 3072 Sep 13 19:18 FlaskApp.db
-rw-rw-r-- 1 zld6fd zld6fd 3194 Sep 13 19:16 FlaskApp.py
-rw-rw-r-- 1 zld6fd zld6fd 3943 Sep 13 19:16 FlaskApp.pyc
-rw-r--r-- 1 zld6fd zld6fd   26 Sep 12 20:39 __init__.py
-rw-r--r-- 1 zld6fd zld6fd  177 Sep 12 21:25 __init__.pyc
-rwxrwxrwx 1 zld6fd zld6fd  145 Sep 12 21:33 schema.sql
drwxr-xr-x 5 zld6fd zld6fd 4096 Sep 12 22:14 static
drwxr-xr-x 2 zld6fd zld6fd 4096 Sep 13 00:34 templates
drwxr-xr-x 7 zld6fd zld6fd 4096 Sep 11 23:32 venv

我的 FlaskApp.py 文件包含以下内容:

# Import statements
import os
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, \
        render_template, flash

# Application Instance
app = Flask(__name__) # Create the instance
app.config.from_object(__name__) # Load config from this file

# Load default config and override config from an environment variable
app.config.update(dict(
        DATABASE='/var/www/FlaskApp/FlaskApp/FlaskApp.db',
        SECRET_KEY='development key',
        USERNAME='admin',
        PASSWORD='password'
))

我的 Apache conf 文件是:

<VirtualHost *:80>
            ServerName zachflask.tk
            ServerAdmin zld6fd@mail.missouri.edu

            WSGIDaemonProcess FlaskApp user=zld6fd group=zld6fd threads=5
            WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
            <Directory /var/www/FlaskApp/FlaskApp>
                    WSGIProcessGroup FlaskApp
                    WSGIApplicationGroup %{GLOBAL}
                    Require all granted
            </Directory>
            Alias /static /var/www/FlaskApp/FlaskApp/static
            <Directory /var/www/FlaskApp/FlaskApp/static/>
                    Require all granted
            </Directory>
            ErrorLog /var/www/FlaskApp/logs/error.log
            LogLevel warn
            CustomLog /var/www/FlaskApp/logs/access.log combined
</VirtualHost>

任何帮助将不胜感激。

【问题讨论】:

  • 它在 apache 之外独立工作吗?你是否开启了所有的烧瓶调试/异常报告?
  • @pvg 是的,该应用程序可以在 localhost 上完美运行。我在执行烧瓶运行之前设置了 FLASK_DEBUG=True。
  • “在本地主机上”是同一台机器/环境/应用程序吗?
  • @pvg by localhost 我的意思是从我的计算机上的终端运行。当我尝试从托管在 Amazon EC2 实例上的 Apache 服务器运行它时,会引发错误。
  • 对。不要在您的终端上,在您的计算机上运行它。在 EC2 实例上运行它,但不使用 apache,就像打开所有调试废话的烧瓶独立应用程序一样。检查日志,观察标准输出上的内容。

标签: python apache flask sqlite server


【解决方案1】:

正如@pvg 在 cmets 中建议的那样,找到了解决方案。我的FlaskApp.db 一直被设置为正确的权限,但我未能更新它所在目录的权限。我将FlaskApp.db 文件移动到一个新的tmp/ 文件夹并运行sudo chmod 777 tmp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 2014-08-30
    • 2011-03-17
    • 2012-06-08
    • 2017-04-18
    • 2018-07-07
    相关资源
    最近更新 更多