Verliere nicht gegen Ruby! Wie man Python (Django) auf Heroku ausführt

Wie der Titel schon sagt, hat Heroku ein Bild von Ruby oder Rails. Sie können aber sowohl Python als auch Ruby verwenden! Daher möchte ich einen Weg veröffentlichen, wie Django, das Python-Framework, funktioniert.

Was ist Django?

Es ist ein sogenanntes Full-Stack-Webframework von Python, das alles enthält, was Sie zum Erstellen einer Web-App benötigen. Zum Beispiel in Java

Es ist notwendig, verschiedene Kombinationen mit zu machen (Ist es heutzutage möglich, mein Bestes mit Java EE allein zu geben?), Aber Django kann grundsätzlich nur mit Django entwickelt werden.

Natürlich erfolgt die Codierung in Python, daher wird dies für diejenigen empfohlen, die Python verwenden können oder Python von nun an studieren möchten. Morgen wird kounoike einen Artikel über Flask schreiben, ein weiteres Framework von Python. Vielleicht möchten Sie auch darauf verweisen.

Dinge, die bei der Bereitstellung von Django in Heroku zu beachten sind

Dies ist der Punkt, von dem ich hauptsächlich abhängig war. Hier werden wir unter der Annahme sprechen, dass Heroku eine Produktionsumgebung und eine Umgebung für den tatsächlichen Betrieb ist.

Python-Version

Die Standardversion von Python auf Heroku ist 2.x. Ich möchte das 3.x System verwenden! In diesem Fall müssen Sie Heroku dies mitteilen.

Debug-Modus

Django verfügt über einen Debug-Modus, der beim Erstellen der Umgebung standardmäßig aktiviert ist. Wenn Sie dies beispielsweise auf Ein setzen, wird der detaillierte Inhalt angezeigt, wenn ein Fehler auftritt. Das Folgende ist ein Beispiel für einen 404-Fehler. Die URL, die derzeit als URL erkannt wird, wird angezeigt. Es ist jedoch problematisch, dass sie auf der zu bedienenden Seite angezeigt wird. デバッグ時の404エラー例

Datenbank

Django verwendet SQLite während der Entwicklung als Datenbank, sofern Sie die Einstellungen nicht ändern. Postgres ist jedoch grundsätzlich auf Heroku verfügbar. Daher müssen auch die DB-Einstellungen geändert werden.

App Server

Als Full-Stack-Framework hat Django selbst eine Funktion als App-Server. Es ist jedoch nur für die Entwicklung vorgesehen, und es wird empfohlen, für den tatsächlichen Betrieb einen klar abgestimmten und dedizierten App-Server zu verwenden.

Umgang mit statischen Dateien

Der App-Server ist im Grunde ein Server zum Ausführen von Anwendungen, daher kann ich statische Dateien nicht gut verarbeiten. Ich denke, dass App-Server anderer Sprachen auch Apache oder Nginx haben, um statische Dateien zu verarbeiten. Dieser Punkt muss ebenfalls berücksichtigt werden.

Lösung

Ich bewege mich so! Wenn Sie Fragen wie "Sie sollten dies tun!" Haben, zögern Sie bitte nicht, uns zu kontaktieren.

Python-Version

Das ist einfach. Bereiten Sie einfach eine Datei mit dem Namen runtime.txt im aktuellen Ordner des Projekts vor und geben Sie dort die Python-Version wie folgt an.

runtime.txt


python-3.4.1

runtime.txt Bitte beachten Sie, dass die verfügbaren Versionen behoben sind. Auf der folgenden Seite können Sie die zu verwendende Version auswählen. Specifying a Python Runtime

Debug-Modus

Die Einstellungen für den Debug-Modus sind in settings.py angegeben. Es ist jedoch schwierig, es zu ändern, wenn Sie auf Heroku drücken, und es zurückzusetzen, wenn Sie sich lokal entwickeln. In meinem Fall versuche ich, wie unten gezeigt, nur dann in den Debug-Modus zu wechseln, wenn der Hostname (Computername) local enthält. Dies liegt daran, dass meine Entwicklungsumgebung einen Namen wie "hogehoge.local" hat. Ändern Sie daher den lokalen Teil entsprechend dem von Ihnen verwendeten Hostnamen (geben Sie umgekehrt den Computernamen auf der Heroku-Seite an). Gibt es irgendwelche)

settings.py



if 'local' in hostname:
    DEBUG = True
    TEMPLATE_DEBUG = True
else:
    DEBUG = False
    TEMPLATE_DEBUG = False
    ALLOWED_HOSTS = ['*']

Datenbank

Dies wird auch in settings.py angegeben, aber ich möchte es nicht entsprechend der Umgebung umschreiben. Daher werde ich die folgende Beschreibung machen.

settings.py



if 'local' in hostname:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
else:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config()
    }

Ein Punkt hier ist

python



    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config()
    }

Teil von. Bei Verwendung der API mit dem Namen dj_database_url (die mit pip installiert werden kann) müssen das Verbindungsziel, der Benutzername, das Kennwort usw. nicht im Code beschrieben werden. Das war ein Schock.

App Server

Das Webanwendungsframework von Python verfügt über einen Standard namens WSGI. Jeder Server, der diesem Standard entspricht, kann verwendet werden. Im Heroku-Dokument gibt es eine Erklärung mit Gunicorn, also werde ich darauf reiten.

Deploying Python Applications with Gunicorn

Um dies zu verwenden, installieren Sie Gunicorn mit Pip und fügen Sie die Beschreibung von Gunicorn am Ende von INSTALLED_APPS in settings.py hinzu.

settings.py



INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'django.contrib.sitemaps',
    'Projektname',
    'gunicorn',   ##← Diese Zeile hinzufügen
)

Und zum Zeitpunkt der Entwicklung

$ python manage.py runserver 0.0.0.0:8080

Was in Form von gestartet wurde, wird mit gunicorn anstelle von "manage.py" nach der später beschriebenen Methode (beschrieben in Procfile) gestartet.

Umgang mit statischen Dateien

Es fiel mir schwer, Informationen darüber zu finden. Zusammenfassend verwenden wir etwas, das als weißes Rauschen bezeichnet wird.

Django and Static Assets

Ändern Sie nach der Installation von whitenoise mit pip settings.py wie im obigen Link beschrieben. Bereiten Sie dann eine Datei mit dem Namen wisgi.py in demselben Ordner vor, in dem sich settings.py befindet, und schreiben Sie die folgenden Inhalte, die auch im dortigen Link beschrieben sind.

wsgi.py



from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application()
application = DjangoWhiteNoise(application)

Schreiben Sie dann Folgendes in das Procfile, damit es mit den Einstellungen einschließlich Gunicorn gestartet werden kann.

Procfile



web: gunicorn --env DJANGO_SETTINGS_MODULE=Projektname.settings Projektname.wsgi --log-file -

Drücken Sie mit dieser Einstellung in das Repository von Heroku und es sollte beginnen!

Was ist mit Leistung? ??

Ich habe die Anwendung, die mit den oben genannten Einstellungen bereitgestellt wurde, neulich freigegeben, und am ersten Tag der Veröffentlichung gab es ungefähr 20.000 PV, aber es hat im Bereich der kostenlosen Stufe gut funktioniert. Nein, Heroku ist wirklich unglaublich.

Unten finden Sie einen Link zu einem Blog, der den Prozess der tatsächlichen Erstellung der Anwendung beschreibt. Ich hoffe, Sie können auch darauf verweisen.

Ich habe versucht, einen Webdienst zur Lösung sexueller Probleme zu erstellen

>> Dienste, die tatsächlich ausgeführt werden Love Points

Nachtrag

Der von heroku & Django erstellte Quellcode des tatsächlich betriebenen Dienstes (anders als ↑) wurde auf github hochgeladen.

Ich hoffe es wird hilfreich für die Komposition usw. sein (Es ist eine schmutzige Quelle ...)

https://github.com/nakazye/ProgrammerProfile/

Der nächste ist ...

Morgen, den 8. Dezember, dreht sich im Heroku-Adventskalender 2014 die Flasche von kounoike! Ich freue mich, dass das Python-Material fortgesetzt wird.

Und ich wünschte, immer mehr Menschen würden Anwendungen mit Python erstellen, inspiriert von dem Artikel.

kounoike, ich freue mich auf den Artikel von morgen! !!

Recommended Posts

Verliere nicht gegen Ruby! Wie man Python (Django) auf Heroku ausführt
Wie man Matplotlib auf Heroku ausführt
So führen Sie MeCab unter Ubuntu 18.04 LTS Python aus
So führen Sie Notepad ++ Python aus
So erstellen Sie eine Django (Python) -Umgebung auf Docker
Verwendung von Django mit Google App Engine / Python
So führen Sie Django unter IIS auf einem Windows-Server aus
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Führen Sie Python regelmäßig auf Heroku Scheduler aus
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Migrieren Sie Django-Anwendungen, die unter Python 2.7 ausgeführt werden, auf Python 3.5
Wie man pydoc auf Python Interpreter liest
So löschen Sie Python 2.x auf einem Mac.
Memorandum über die Verwendung von Gremlin Python
Hinweise zum Ausführen von Cython unter OSX
Wie schreibe ich Ruby to_s in Python
So führen Sie Maya Python-Skripte aus
Hochladen mit Heroku, Flask, Python, Git (4)
Wie man Spaß am Programmieren mit Minecraft hat (Ruby, Python)
Setzen Sie MicroPython unter Windows ein, um ESP32 unter Python auszuführen
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Strategie zur Monetarisierung mit Python Java
So installieren Sie OpenCV auf Jetson Nano Python
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
So führen Sie LeapMotion mit Nicht-Apple Python aus
[Python] So installieren Sie OpenCV unter Anaconda [Windows]
Führen Sie Python auf Apache aus, um InfluxDB-Daten anzuzeigen
So führen Sie eine Django-Anwendung auf einem Docker-Container aus (Entwicklungs- und Produktionsumgebung)
So installieren Sie Python
Führen Sie Django auf PythonAnywhere aus
So installieren Sie Python
[Python] So führen Sie Jupyter-Notebook + Pandas + Multiprocessing (Pool) [Pandas] Memo aus
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
[Python] [Django] Verwendung des Auswahlfelds und Hinzufügen von Optionen
So binden Sie mod_wsgi in Apache unter Python Windows ein
So führen Sie Python im virtuellen Raum aus (für MacOS)
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
So führen Sie Tests zusammen mit Python unittest aus
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
So führen Sie Self Bot mit Discord.py aus [Einfacher Vandalismus! ]]
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Wie man setUp nur einmal in Python unittest ausführt
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
python, php, ruby Konvertieren von Dezimalzahlen in n
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
Umgang mit JSON in Ruby, Python, JavaScript, PHP
[Neueste Version 2020.8] So installieren Sie Python
Führen Sie Openpose unter Python (Windows) aus.
So installieren Sie Python [Windows]
So installieren Sie Python2.7 python3.5 mit pyenv (unter RHEL5 CentOS5) (2016 Nov)
So führen Sie ein geschultes Transformatormodell lokal auf CloudTPU aus
Python auf Ruby und wütend Ruby auf Python
python3: Verwendung der Flasche (2)
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu