/ / Błąd na logu kolb modułu - python, kolba, supervisord, flask-login

Błąd na logu kolb modułu - python, flask, supervisord, flask-login

Jestem nowy na dev kolby / Pythona, ale muszę użyćPowerdns-admin dla mojego publicznego DNS. Ta praca z kolbą i muszę użyć opiekuna, aby uruchomić panel sieciowy powerdns-admin. Wydaje mi się, że popełniłem kilka błędów w książce telefonicznej lub w butelce.

To jest mój /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)

Oto 12 pierwszych linii / opt / powerdns-admin / app /w tym.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)

I to jest moja konfiguracja supervisora

[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

Ale kiedy wykonuję aktualizację supervisorctl, mam to na liście 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

Jednak po uruchomieniu run.py ręcznie jest OK

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)

To jest kilka wersji:

 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

Mam nadzieję, że rozwiązanie to głupota, jestem zablokowana od 4 dni na tym :(

Dzięki

Odpowiedzi:

2 dla odpowiedzi № 1

Twoja konfiguracja supervisora ​​uruchamia twój system Python zamiast twojego flask virtualenv Python.

Komenda supervisora ​​musi być:

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

Nie jestem pewien, czy ~ działa, może musisz ją rozwinąć.


2 dla odpowiedzi nr 2

Wydaje się, że używasz środowiska wirtualnego do swojej aplikacji kolby. Jednak w konfiguracji administratora uruchom aplikację z globalną instalacją Pythona.

Rozwiązaniem jest zainstalowanie wszystkich niezbędnych pakietów w globalnej wersji Pythona lub uruchomienie środowiska wirtualnego od administratora i uruchomienie tam aplikacji.

Wolę ten drugi, ponieważ jest bardziej przejrzysty, jeśli masz wiele aplikacji Flask. Prostym sposobem jest utworzenie run.sh w ramach dowiązania do twojej aplikacji Flask z następującą treścią:

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

Nie zapomnij o wykonaniu tego skryptu przez $ chmod a+x run.sh i zamień ustawienia polecenia w pliku konfiguracyjnym superwizora na nazwę pliku tego skryptu. W ten sposób osoba nadzorująca uruchomi Twoją aplikację Flask w środowisku wirtualnym.