Flask

Flask

Deploye Flask mit gunicorn, Postgres, Migrationen und RQ- oder Celery-Workern.

  • Erkannt anhand von requirements.txt oder pyproject.toml, die flask aufführen.
  • Web: gunicorn auf $PORT mit app:app. Liegt deine App woanders, setze den Startbefehl auf dein module:callable (bei einer App-Factory "myapp:create_app()").
  • Release: standardmäßig keiner. Mit Flask-Migrate setze ihn auf flask db upgrade; mit Alembic auf alembic upgrade head. Eine release:-Zeile im Procfile wird verwendet, falls vorhanden.
  • Datenbank: psycopg → Postgres, mit injiziertem DATABASE_URL.
  • Workers und Cron: RQ wird angeboten, wenn es eine Abhängigkeit ist. Für Celery füge worker: celery -A myapp.celery worker zu deinem Procfile hinzu oder füge es im Tab Workers hinzu.

Workers sind ein zweiter Prozess derselben App

Flask hat keine eigene Worker-Konvention, daher wendet Railyard einfach direkt die 12-Factor-Regel an: Deklariere einen zweiten Prozess in deinem Procfile, und er skaliert unabhängig von web.

web: gunicorn app:app --bind 0.0.0.0:$PORT
worker: rq worker --url $REDIS_URL

Oder füge ihn im Tab Workers der App hinzu, ohne das Repo zu berühren, und skaliere beide über die CLI:

railyard scale my-app worker=2

RQ wird automatisch angeboten, wenn es eine Abhängigkeit ist; Celery wird für Flask nicht automatisch erkannt — es gibt keine einheitliche Konvention dafür, wo die Celery-App liegt — deklariere also einmalig selbst ihren Befehl. Siehe Workers und geplante Jobs für Cron: entweder ein geplanter Befehl dort, oder ein zweiter Worker-Prozess, der celery -A myapp.celery beat ausführt.

Konfiguration und Secrets

DATABASE_URL wird injiziert, sobald psycopg/psycopg2 eine Abhängigkeit ist, und REDIS_URL, sobald ein Redis-Client (redis, rq) es ist. Alles andere — SECRET_KEY, FLASK_ENV, Feature-Flags — ist eine normale Env-Variable unter Variables, oder railyard env:set my-app KEY=VALUE über die CLI, sodass dasselbe Image unverändert von Staging bis Produktion läuft: Dev/Prod-Parität, kein Branch zur Build-Zeit. Verweise auf eine Datenbank oder Redis, die als eigener Dienst auf dem Canvas laufen, mit ${{redis.RAILYARD_PRIVATE_URL}} — pro Umgebung aufgelöst. Siehe Variablen und Secrets.

So deployst du

  • Aus einem Repo: Füge die Git-URL ein, oder wähle es aus der Liste, sobald GitHub verbunden ist — Railyard liest requirements.txt/pyproject.toml, füllt gunicorn und DATABASE_URL aus und deployt bei jedem Push.
  • Über die CLI: railyard create my-app https://github.com/me/my-app --addons postgres,redis, oder railyard git:remote && git push railyard main aus dem Repo heraus.
  • Ein Klick: Füge den Deploy-Button zu deiner README hinzu, oder veröffentliche im Template-Katalog, damit jeder es mit bereits ausgefüllten Addons und Variablen starten kann.