Flask没有看到环境变量

时间:2017-09-09 02:58:50

标签: python apache flask environment-variables virtualenv

我使用带有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$ 

有关于此的任何想法吗?

编辑: 文件结构:

1 个答案:

答案 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>

感谢所有帮助我解决这个问题的人,你们向我推荐了一些让我发挥作用的想法和想法。