我是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天:(
由于
答案 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
我不确定~
是否有效,也许你必须扩展它。