我使用带有virtualenv的WSGI将我的Flask应用程序与apache连接起来。我有几个配置变量(密钥和数据库URI),所以我正在使用
app = Flask(__name__)
app.config.from_envvar('CONFIG_FILE_FLASK')
apache错误日志中的错误是:
RuntimeError:未设置环境变量“CONFIG_FILE_FLASK”,因此无法加载此类配置。设置此变量并使其指向配置文件
此变量存在(使用命令 printenv ):
......
UPSTART_INSTANCE=
COLORTERM=truecolor
CONFIG_FILE_FLASK=/var/flaskconf/config.cfg
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/oleg
USER=oleg
......
/var/flaskconf/config.cfg 本身就是:
SECRET_KEY = 'thisissupposedtobesecret'
SQLALCHEMY_DATABASE_URI = 'mysql://user:password@localhost/Table'
如果我这样做也不起作用:
sudo python __init__.py
但是,如果没有sudo它可以工作!(也许这将是一个线索)
提前非常感谢你。 准备立即提供任何文件。
更新1 我还注意到变量FLASK_APP也是“不可见的”
oleg@test:/var/www/app/app$ export FLASK_APP=app.py
oleg@test:/var/www/app/app$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (app) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
oleg@test:/var/www/app/app$
有关于此的任何想法吗?
编辑: 文件结构:
答案 0 :(得分:2)
通过使我的Flask应用程序成为python模块解决了这个问题。
首先,现在应用程序的结构是下一个(正确的结构):
__init__.py
包含以下内容:
from .iotdev import app
另外,为了使用虚拟环境,通过添加WSGIDaemonProcess
AND WSGIProcessGroup
语句编辑了站点配置文件,因此iotdev.conf(文件的完整路径为 / etc / apache2 /sites-available/iotdev.conf):
<VirtualHost *:80>
ServerName 127.0.0.1
ServerAdmin admin@mywebsite.com
WSGIDaemonProcess iotdev python-path=/var/www/iotdev:/var/www/iotdev/iotdev/env/lib/python2.7/site-packages
WSGIProcessGroup iotdev
WSGIScriptAlias / /var/www/iotdev/iotdev.wsgi
<Directory /var/www/iotdev/iotdev/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/iotdev/iotdev/static
<Directory /var/www/iotdev/iotdev/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
感谢所有帮助我解决这个问题的人,你们向我推荐了一些让我发挥作用的想法和想法。