Jak odpalić serwer flaska bez pipenv itd

0

Hey. Mam taki problem że swoją apkę na swoim pc odpalam przez komendę $pipenv shell && flask run, ale jak zrobię $python init_.py to mam komunikat :

ValueError: Attempted relative import in non-package

Przeszkadzają mu wówczas linijki typu :

from .extensions import db

I przez to nie mogę tej apki postawić na apache'u bo tam trzeba wskazać jakiś jeden plik odpalający serwer -.-

0

A nie możesz stworzyć skryptu np. w bashu który by odpalił komende odpalającą apke i go wskazać?

0

@Ephyron: Właśnie chyba niezbyt, bo to ten wbudowany serwer flaska odpalany przez basha jest jedynie pogładowy dla deva i nie nadaje sie na normalny publiczny serwer, więc to musi jakoś tam apache przez wsgi odpalić po swojemu, ogólnie to strasznie skomplikowany ten deploy na apache, jest może jakaś prostsza alternatywa?

1

No pewnie, że jest alternatywa. Żaden apache. Użyj po prosut gunicorna. :)

0

Fajna sprawa ten gunicorn, acz jest troche konfigurowania nginxa z tego co widzę przy tym bo jest on zalecany. Znalazłem też bjoern, jeszcze mniejsza i szybsza alternatywa.

Ale paru spraw nadal nie rozumiem mimo wertowania tony docsów, np robię $export FLASK_APP = folder_z_apka, potem robie $flask run i serwer działa ale nie rozumiem co tak na prawde sie w tym momencie dzieje, jaki plik ten flask odpala i jak mam to zrobić przez pythona a nie przez basha? Próbowałem prześledzić egzekucje przez strace ale za dużo śmieci wypluwa, odczyt przelatuje przez połowe plików pythona na pc.

0

Tutaj masz całkiem zrozumiały poradnik jak używać gunicorna do odpalania aplikacji flaskowej (z czasów Ubuntu 14.04, ale większość się nie zdezaktualizowała):
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-14-04

A co do tego w jaki sposób FLASK_APP określa co ma być zaimportowane, dokumentacja jest dość szczegółowa co się dzieje:
https://flask.palletsprojects.com/en/1.1.x/cli/

0

Wybacz. Jestem chyba za głupi zwyczajnie.
Mój plik __init__.py wygląda tak:

from flask import Flask
from .extensions import db
from .routes import short

def create_app(config_file='settings.py'):
    app = Flask(__name__)
    
    app.config.from_pyfile(config_file)
    
    db.init_app(app)
    
    app.register_blueprint(short)
    
    return app

I nie wiem jak ja mam to przekazać do gunicorna bo wszystkie dokumentacje operują na zupełnie innych przykładach.

0

A to nie jest tak, że Twój __init__.py zamieniasz na app.py oraz tworzysz plik wsgi.py i robisz tak:

from app import create_app

application = create_app()

if __name__ == '__main__':
  application.run()

i w gunicornie tak:

gunicorn --bind 0.0.0.0:8000 wsgi

0

@jackweb:
Wówczas mam ten sam błąd co na początku:

from .extensions import db
ValueError: Attempted relative import in non-package

Probowałem dodać coś w tym stylu przed tymi importami z kropkami:

PACKAGE_PARRENT = '..'
SCRIPT_DIR = os.path.dirname( os.path.realpath( os.path.join( os.getcwd(), os.path.expanduser(__file__)))) 
sys.path.append(os.path.normpath(os.path.join(SCRIPT_DIR, PACKAGE_PARRENT)))

Ale też efekt pozostaje ten sam.

Mogę ewentualnie przerobić apkę żeby nie korzystać z importowania po kropce, będzie to troche roboty ale nic innego mi do głowy póki co nie wpadło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1