2016-12-20 9 views
2

Я новичок в фляге/python dev, но мне нужно использовать Powerdns-admin для моего публичного DNS. Эта работа с флягой, и мне нужно использовать супервизора для запуска веб-панели powerdns-admin. Думаю, я допустил несколько ошибок в каталоге или в пусковой колбе.Ошибка в модульной фляге Логин

Это мой /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) 

Здесь 12 Первые строки/Opt/PowerDNS-админ/приложение/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 вручную это нормально

[email protected]:~$ source ./flask/bin/activate 
(flask) [email protected]:~$ 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 дней на том :(

Thanks

+0

Добавьте этот импорт вместо ... из flask.ext.login import LoginManager – Kenyanke

ответ

2

Конфигурация вашего диспетчера запускает вашу систему Python вместо вашего flask virtualenv Python.

Команда руководитель должен быть:

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

Я не уверен, если ~ работы, возможно, вам придется расширить.

+1

Я изменяю свой диспетчер conf с вашим советом, и это работа. Итак, я сделал сервис systemd с этим путем, и он тоже работает, я предпочитаю этот путь :) Спасибо –

2

Кажется, вы используете виртуальную среду для своего фляга. Однако в конфигурации вашего супервизора вы запускаете приложение с помощью вашей глобальной установки python.

Решение состоит в том, чтобы либо установить все необходимые пакеты в вашу глобальную версию Python, либо запустить виртуальную среду от супервизора и запустить там приложение.

Я предпочитаю последнее, так как он более ясен, если у вас несколько приложений для фляг. Самый простой способ заключается в создании run.sh в direactory вашего приложения Колба со следующим содержанием:

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

Не забудьте сделать скрипт исполняемым с помощью $ chmod a+x run.sh и заменить настройку команды в файле конфигурации супервизор с filename этого скрипта. Таким образом, супервизор запускает ваше приложение Flask в виртуальной среде.