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 № 1Twoja 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.