[PYTHON] Führen Sie die App mit Flask + Heroku aus

Ich wollte eine mit Flask erstellte App in einer Produktionsumgebung bereitstellen. Es war nicht einfach und ich stand den ganzen Tag vor der Tür. Als ich es mit Rails gemacht habe, hat es sofort mit "git push heroku master" von "heroku create" gestartet.

Deshalb werde ich ein Memorandum hinterlassen, bis Flask in Heroku veröffentlicht wird.

Entwicklungsumgebung

Klicken Sie hier, um die Technologie anzuzeigen, die dieses Mal für die Bereitstellung verwendet wird.

Im Flask-Tutorial wird die Datenbank mit dem Befehl db.create_all () erstellt. Für diejenigen, die an sogenannte Migrationsdateien gewöhnt sind, ist es jedoch weiterhin wünschenswert, den Status der Tabelle zu verwalten. Verwenden Sie in diesem Fall "Flask Migrate".

Erstes Erstellen der App

Zunächst werden wir die erste Konstruktion der Anwendung durchführen. Flask ist ziemlich anpassbar, so dass verschiedene Entwickler unterschiedliche Verzeichnisstrukturen haben. Ich bin immer noch auf der Suche nach der besten Praxis, aber am Ende sieht es so aus.

app/
├── manage.py
├── main
│   ├── __init__.py
│   ├── views.py
│   ├── config.py
│   ├── models.py
│   ├── app.db
│   ├── static/
│   ├── templates/
│   └── instance
│       └──application.cfg
├── Procfile
├── requirements.txt
├── migrations/
└── venv/

Ein Projekt erstellen

$ cd APP
$ mkdir -p main/{static,templates,instance}
$ cd main
$ touch manage.py requirements.txt Procfile
$ touch main/{__init__,views,models,config}.py

Fügen Sie Stylesheets hinzu und zeigen Sie Teile nach Belieben an. Dieses Mal funktioniert DB in Heroku ordnungsgemäß, und ich werde es tun, bis "Hallo Welt!" Ausgegeben wird, also nur das Backend.

manage.py Eine Datei zum Starten und Ausführen des Kolbens.

manage.py


from main import app
app.run()

main/init.py Kolben-App generieren.

main/__init__.py


from flask import Flask

app = Flask(__name__)

import main.views

main/views.py Der Ansichtsteil, in dem Hello world! Angezeigt wird.

main/views.py


from flask import render_template
from main import app, db

@app.route('/')
def home():
    return render_template('home/index.html')

Konfigurationsdatei erstellen

Es gibt hier viele Artikel zu Best Practices, daher dachte ich, es wäre einfacher zu verstehen, wenn Sie sich darauf beziehen. Hier werde ich diejenigen vorstellen, die die geheimen verbergen können, sobald sie sich bewegen.

main/config.py

main/config.py


import os

class BaseConfig(object):
    SQLALCHEMY_TRACK_MODIFICATIONS = False  

class DevelopmentConfig(BaseConfig):
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///app.db'

class ProductionConfig(BaseConfig):
    DEBUG = True
    TESTING = True
    SQLALCHEMY_DATABASE_URI=os.environ.get('DATABASE_URL')

config = {
    "default": "main.config.BaseConfig",
    "development": "main.config.DevelopmentConfig",
    "production": "main.config.ProductionConfig",
}

def configure_app(app):
    config_name= os.getenv('FLASK_ENV')
    app.config.from_object(config[config_name])
    app.config.from_pyfile('application.cfg', silent=True)

** FLASK_ENV ** sollte als "export FLASK_ENV = development" festgelegt werden. Was ich hier sage ist, dass während die grundlegenden BaseConfig-Inhalte gemeinsam verwendet werden, die variablen Inhalte nach der Umgebung (Entwicklung / Produktion) getrennt werden.

os.environ.get ('DATABASE_URL') zieht automatisch ** DATABASE_UEL ** mit Herkou in die Datenbank, also stellen Sie dies für die Produktion ein.

main/instance/application.cfg

instance/application.cfg


SECRET_KEY='XXXXXXXXXXXXXXXXXXX'

Hier wird der API-Schlüssel aufgelistet, der nicht veröffentlicht werden kann. Stellen Sie außerdem sicher, dass Sie es in ".gitignore" schreiben und nicht veröffentlichen.

Lesen Sie die Einstellungsdatei

Stellen Sie die vorbereitete Einstellungsdatei in "__init __. Py" zur Verfügung.

main/__init__.py


#Fügen Sie den folgenden Inhalt hinzu
from main.config import configure_app

app = Flask(__name__, instance_relative_config=True)
configure_app(app)

In Heroku bereitstellen

Installation von Gunicorn und Psycpg2

Stellen Sie es in Heroku bereit und installieren Sie zwei Bibliotheken, um "PostgreSQL" zu verwenden.

$ pip install gunicorm
$ pip install psycopg2

Zu Procfile hinzugefügt

Fügen Sie Befehle hinzu, um die App auf Heroku auszuführen.

web: gunicorn main:app --log-file -

Installationspaket vorbereiten

pip freeze ist ein praktischer Befehl, der alle in der virtuellen Umgebung verwendeten Bibliotheksinformationen aufzeichnet.

$ pip freeze > requirements.txt

In der Heroku-App bereitstellen

Die Einstellung von Heroku wird weggelassen.

$ heroku create flask-app
$ git push heroku master
$ heroku config:set FLASK_APP=main
$ heroku config:set FLASK_ENV=production

Wenn Sie zu diesem Zeitpunkt "$ heroku open" ausführen, sollten Sie "Hallo Welt!" Sehen.

Datenbankeinstellungen

Modell erstellen

Bereiten Sie diesmal das Benutzermodell als Test vor.

main/models.py


from main import db

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    email = db.Column(db.String, unique=True)

    def __repr__(self):
        return '<User %r>' % self.name

Flask Migrate, SQL Alchemy-Installation

Installieren Sie jede Bibliothek, die für die Migration der Datenbank erforderlich ist.

$ pip install flask_migrate
$ pip install flask_sqlalchemy

Modell laden

Fügen Sie die Vorbereitung zum Laden des festgelegten Modells zu "__init __. Py" hinzu.

main/__init__.py


#Ich werde folgendes hinzufügen
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy(app)
migrate = Migrate(app, db)
db.init_app(app)

import main.models

Migration

Migrieren Sie gemäß der Reihenfolge des Befehls Flask Migrate.

$ flask db init
$ flask db migrate
$ flask db upgrade

Dadurch werden eine "Migrations" -Datei und eine Datenbank mit dem Namen "app.db" generiert.

Migrieren Sie mit Heroku

Installationspaket vorbereiten

Richten Sie die neu installierte Bibliothek wie zuvor so ein, dass sie mit Heroku verwendet werden kann.

$ pip freeze > requirements.txt

Ausführung der Migration

Ich bin ein wenig süchtig danach, aber für Heroku gebe ich die lokal generierte "Migrations" -Datei an den Server und führe "db init" oder "db migrate" nicht aus.

$ heroku run flask db upgrade

Verweise

Recommended Posts

Führen Sie die App mit Flask + Heroku aus
Berühre Flask + laufe mit Heroku
Stellen Sie die Flask-App auf Heroku bereit
Stellen Sie die Flask-App auf Heroku bereit
Einfache Web-App mit Python + Flask + Heroku
Erste Schritte mit Heroku, Bereitstellen der Flaschen-App
Führen Sie die Kolben-App auf Cloud 9 und Apache Httpd aus
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Stellen Sie die Flask-App für Heroku bereit (bitter)
Datei mit Standard-App öffnen
Azure-Tabellenspeicher mit PTVS Flask-App
Stellen Sie die Kolben-App mit mod_wsgi bereit (mithilfe von pipenv).
Führen Sie das Original YOLO mit Jetson Nano aus
[Python] Führen Sie Flask in Google App Engine aus
Achtung Seq2 Führen Sie das Dialogmodell mit Seq aus
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Erstellen Sie eine einfache Web-App mit Flasche
Starten Sie die Flask-Anwendung mit Docker auf Heroku
Hochladen mit Heroku, Flask, Python, Git (4)
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Mit Cloud Run x Flask können Sie ganz einfach Mikrodienste realisieren
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Führen Sie Python mit VBA aus
Führen Sie prepDE.py mit python3 aus
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Bis Sie die Flask-Anwendung vorerst in Google App Engine ausführen
Führen Sie Blender mit Python aus
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
IP-Einschränkung mit Flask
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
POST das Bild mit json und erhalte es mit der Flasche
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
Arbeitsnotiz, die ich i18n mit Flask App ausprobiert habe
Hallo Welt auf Flasche
Führen Sie Apache2 + WSGI + Flask aus
Programmieren mit Python Flask
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Führen Sie iperf mit Python aus
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker
Führen Sie den in Python (Flask) implementierten LINE Bot "ohne Verwendung von Heroku" aus.
So führen Sie eine mit Python + py2app erstellte App aus, die mit Anaconda erstellt wurde
Erstellen Sie Heroku, Flask, Python, Nyanko Bulletin Board mit "CSV-Datei"
Der Höhepunkt der REST + Normal Site-Konstruktion mit Flask, Eve
Stellen Sie Flask jetzt mit ZEIT bereit
Todo App mit Django-Bootstrap-Modal-Forms-Plugin
Führen Sie Python mit PyCharm aus (Windows)
Hallo Welt mit Flask + Hamlish
Setzen Sie den Debugger mit der Nase ein
Führen Sie Python mit CloudFlash aus (arm926ej-s)