模块Flask登录时出错

时间:2016-12-20 11:28:41

标签: python flask supervisord flask-login

我是flask / python dev的新手,但我需要使用Powerdns-admin作为我的公共DNS。 这项工作与烧瓶,我需要使用主管启动powerdns-admin的web面板。 我想我在目录或启动烧瓶时犯了一些错误。

这是我的/opt/powerdns-admin/run.py

#!/usr/bin/env python
from app import app
from config import PORT

try:
        from config import BIND_ADDRESS
except:
        BIND_ADDRESS = '127.0.0.1'

if __name__ == '__main__':
    app.run(debug = True, host=BIND_ADDRESS, port=PORT)

这里的第一行是/ opt / powerdns-admin / app / init .py

from werkzeug.contrib.fixers import ProxyFix
from flask import Flask, request, session, redirect, url_for
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')
app.wsgi_app = ProxyFix(app.wsgi_app)

login_manager = LoginManager()
login_manager.init_app(app)
db = SQLAlchemy(app)

这是我的主管配置

[program:powerdnsadmin]
command = python /opt/powerdns-admin/run.py
directory = /opt/powerdns-admin/app
autostart = true
autorestart = true
stdout_logfile=/var/log/supervisor/program_powerdnsadmin.log
stderr_logfile=/var/log/supervisor/program_powerdnsadmin.error

但是,当我进行supervisorctl更新时,我在program_powerdnsadmin.error上得到了这个

Traceback (most recent call last):
  File "/opt/powerdns-admin/run.py", line 2, in <module>
    from app import app
  File "/opt/powerdns-admin/app/__init__.py", line 3, in <module>
    from flask_login import LoginManager
ImportError: No module named flask_login

但是,当我手动启动run.py时,没关系

infra@nameserver:~$ source ./flask/bin/activate
(flask) infra@nameserver:~$ python powerdns-admin/run.py
[INFO]  * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

这是几个版本:

 pip show python
Name: Python
Version: 2.7.12
 pip show flask
Name: Flask
Version: 0.11.1
 pip show flask_login
Name: Flask-Login
Version: 0.3.2

我希望解决方案是一个愚蠢的事情,我已经被阻止了4天:(

由于

2 个答案:

答案 0 :(得分:2)

您似乎在烧瓶应用程序中使用虚拟环境。但是在您的管理员配置中,您可以使用全局python安装启动应用程序。

解决方案是将所有必需的软件包安装到您的全局Python版本,或者从主管启动您的虚拟环境并在那里运行您的应用程序。

我更喜欢后者,因为如果你有多个Flask应用程序会更清楚。一种简单的方法是使用以下内容在Flask应用程序的direactory中创建run.sh

#!/bin/bash
source ./flask/bin/activate
exec python powerdns-admin/run.py

不要忘记通过$ chmod a+x run.sh使此脚本可执行,并使用此脚本的文件名替换supervisor配置文件中的命令设置。这样主管就可以在虚拟环境中启动Flask应用程序。

答案 1 :(得分:2)

您的主管配置是启动系统Python而不是flask virtualenv Python。

主管命令必须是:

command = ~/flask/bin/python /opt/powerdns-admin/run.py

我不确定~是否有效,也许你必须扩展它。