WSGI 无法在应用程序的同一目录中找到文件

WSGI can't find file in same directory in app

我正在尝试使用 apache2 和 wsgi 设置 Ubuntu 服务器,但出现 500 内部错误。 WSGI 找不到文件 "client_secrets.json".

应用结构

/var/www/FlaskApp/
  flaskapp.wsgi
  - FlaskApp
      - static
        // All js, css, imgs and fonts
      - templates
        // All templates in here
      __init__.py
      client_secrets.json
      database_setup.py
      starter_content.py

init.py

app = Flask(__name__)

CLIENT_ID = json.loads(
    open('client_secrets.json', 'r').read())['web']['client_id']
APPLICATION_NAME = "Catalog App"

if __name__ == '__main__':
    app.secret_key = 'super_secret_key'
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

flaskapp.wsgi:

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")

from FlaskApp import app as application
application.secret_key = 'MY_SECRET_KEY'

/etc/apache2/sites-available/FlaskApp.conf :

<VirtualHost *:80>
    ServerName SERVER_IP
    ServerAdmin email@email.com
    WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
    <Directory /var/www/FlaskApp/FlaskApp/>
        Order allow,deny
        Allow from all
    </Directory>
    Alias /static /var/www/FlaskApp/FlaskApp/static
    <Directory /var/www/FlaskApp/FlaskApp/static/>
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    LogLevel warn
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

tail -f /var/log/apache2/error.log:

您必须提供 json 文件的正确路径,您可以尝试 open_resource:

with app.open_resource('client_secrets.json') as f:    
    CLIENT_ID = json.load(f)['web']['client_id']

或直接使用路径:

import os
PROJECT_ROOT = os.path.realpath(os.path.dirname(__file__))
json_url = os.path.join(PROJECT_ROOT, 'client_secrets.json')
CLIENT_ID = json.load(open(json_url))['web']['client_id']