[PYTHON] Veröffentlichtes Django-Projekt, entwickelt in Cloud9 auf Heroku

Veröffentlichtes Django-Projekt, entwickelt in Cloud9 auf Heroku

Prolog

Ich habe versucht, Heroku ein wenig in [vorheriger Artikel] zu verwenden (http://qiita.com/soogie/items/4f0833b9c59cf299fdc6). Drei Monate später hat meine Erfahrung mit R zugenommen, aber dieses Mal spreche ich über die Verwendung von Python anstelle von R.

Es gibt viele Pakete für R, viele Bücher wurden letztes Jahr veröffentlicht, und in letzter Zeit gibt es eine Lücke, in der alle R-Leute, die ich über Tokyo R getroffen habe, die ganze Zeit teilnehmen, also ist es sehr praktisch, aber im Grunde Da awk mit Blick auf die statistische Verarbeitung erstellt wurde, wurde awk für die Datenvorverarbeitung verwendet. Die Verwendung von awk in der Windows 7-Umgebung (32 Bit) des Unternehmens ist jedoch problematisch. Tatsächlich begann ich im Sommer 2015 mit dem Sammeln von Informationen und nahm an verschiedenen Studiensitzungen zu Python (und Julia) teil.

Es scheint, dass ich viel teilgenommen habe, als ich sie nebeneinander gestellt habe, aber ich habe mehrmals nur im Top StartPython Club teilgenommen, und die anderen haben nur einmal teilgenommen.

Ich war ein Anfänger von Python und erhielt eine Beratung von einem Kollegen bei der Arbeit, der sagte: "Ich möchte eine Webanwendung mit Django erstellen."

  1. Mit Python 3
  2. Mit Django 1.9
  3. Erstellen Sie eine Web-App in Cloud9 IDE
  4. Migrieren Sie von SQLite3 zu PostgreSQL
  5. Auf Heroku bereitstellen

Es ist eine Geschichte, in der ich mein Bestes gegeben habe.

Ich hatte es besonders in 3-5 schwer, deshalb möchte ich mich auf diesen Bereich konzentrieren.

Dinge vorzubereiten

--Cloud9-Konto: Wenn Sie noch kein Konto haben, melden Sie sich von [hier] an (https://c9.io/signup). --heroku-Konto: Wenn Sie noch kein Konto haben, melden Sie sich über [hier] an (https://signup.heroku.com/login).

Nur das. Der Grund für Cloud 9 ist übrigens, dass die integrierte Entwicklungsumgebung in der Cloud, die dieselbe Umgebung vorbereiten kann, am bequemsten für die Beantwortung verschiedener Fragen von Kollegen war, die sich für Python interessierten.

Da ich zu Hause Mac und bei der Arbeit Windows 7 bin, möchte ich mich auch nicht von den Unterschieden in Betriebssystem, Zeichencode und Zeilenvorschubcode beeinflussen lassen.

Python3 & Django App Entwicklung auf Cloud9

Erstellen Sie einen Django-Arbeitsbereich

Melden Sie sich bei Cloud9 an und klicken Sie im Dashboard-Bildschirm auf Neuen Arbeitsbereich erstellen. ワークスペースの追加

Geben Sie den Projektnamen ein (vorläufig abc), wählen Sie die Django-Vorlage aus der Vorlagenliste unten aus und klicken Sie auf die Schaltfläche Arbeitsbereich erstellen. djangoプロジェクトを選択

Der Arbeitsbereich wurde mit der Django-Vorlage erstellt. Die anfängliche Ordnerstruktur ist wie folgt. 初期のフォルダ構成 c9_abc ist der Django-Projektordner.

Machen Sie es zu einer Python 3-Umgebung

Die Cloud 9-Vorlage konfiguriert Python 2.7 und den entsprechenden Django. Ich möchte in Python3 entwickeln, also ändern wir die Einstellungen so, dass es in Python3 funktioniert.

Öffnen Sie den Projekteinstellungsbildschirm mit Cloud 9 - Präferenzen aus dem Arbeitsbereich-Menü. Preferences

Ändern Sie Python 2 in Python 3 im Abschnitt Sprachunterstützung. Language Support

Selbst wenn die Voreinstellung Python3 ist, bleibt Python2.7 erhalten, wenn Sie in der Befehlszeile "python --version" festlegen.

$ python --version
Python 2.7.6

Ich habe vor, viele Male später auf "python manage.py migrate" usw. zu klicken. Stellen Sie daher sicher, dass "/ usr / bin / python" auf Python3 zeigt.

$ sudo mv /usr/bin/python /usr/bin/python2
$ sudo ln -s /usr/bin/python3 /usr/bin/python
$ python —version
python 3.4.3    

Ich habe auf diesen Artikel für die Methode verwiesen. [^ 1] Cloud 9 ist auch praktisch, da Sie dies ohne zu zögern tun können.

Lassen Sie uns nun das abc-Projekt ausführen. Klicken Sie in der Menüleiste auf Projekt ausführen. Run Project

Das geht nicht djangoエラー

Es scheint zu sagen "Ich habe keinen Django". Vielleicht ist Django wegen Python3 nicht enthalten. Installieren Sie also Django. Da es Python3 ist, verwenden wir pip3.

$ sudo pip3 install django

Als ich erneut auf Projekt ausführen geklickt habe, hat es diesmal einwandfrei funktioniert. django動いた

Ersetzen Sie Heroku durch eine Reihe von Django-Dateien

Wenn Sie nur auf Cloud9 entwickeln, können Sie es so lassen, wie es ist. Um es später für Heroku bereitzustellen, ersetzen Sie es durch die Vorlage des von Heroku erstellten Django-Projekts. Ich habe auf diesen Artikel [^ 2] für das Verfahren hier verwiesen.

Löschen Sie zunächst das Django-Projekt, das beim Erstellen des Arbeitsbereichs automatisch konfiguriert wurde. Nicht nur der Projektordner, sondern auch manage.py usw. werden gelöscht. さっくり削除

Als nächstes bringen Sie die Django-Vorlage für Heroku von GitHub.

$ django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile c9_abc

Der letzte c9_abc hat denselben Namen wie der zuvor gelöschte Django-Projektordner.

Wenn man sich die Ordnerstruktur ansieht, ist das etwas seltsam. Die Hierarchie ist um eins verschoben. 階層がひとつずれている

Bewegen Sie sich jeweils um eine Ebene nach oben, sodass sich manage.py auf der obersten Ebene befindet. Der Ordner abc \ c9_abc \ c9_abc, der auf der untersten Ebene verbleibt, ist leer. Löschen Sie ihn daher. 階層を修正

In dem Artikel, auf den ich verwiesen habe, habe ich settings.py und wsgi.py so bearbeitet, dass sie unter Cloud9 funktionieren. Bei der Bereitstellung auf Heroku musste ich sie jedoch wieder zurücksetzen, was problematisch ist. Daher habe ich die erforderlichen Bibliotheken installiert.

$ sudo pip3 install dj-database-url
$ sudo pip3 install Whitenoise
$ sudo pip3 install Gunicorn

Überprüfen Sie den Vorgang mit Projekt ausführen.

App-Entwicklung & Testen

Ich werde diesmal den Inhalt der App weglassen.

Schließlich bin ich neu in Python, daher muss ich vor Django die Grammatik von Python und die Verwendung von Bibliotheken überprüfen, um fortzufahren.

Informationen zur Verwendung der Python-Bibliothek finden Sie unter Ausgewähltes Rezept der Python-Bibliothek (Technical Review) 96% E3% 83% A9% E3% 83% AA% E5% 8E% B3% E9% 81% B8% E3% 83% AC% E3% 82% B7% E3% 83% 94-% E6% B1% A0 % E5% 86% 85-% E5% AD% 9D% E5% 95% 93 / dp / 4774177075 / ref = sr_1_1? Dh = UTF8 & qid = 1457793060 & sr = 8-1 & Schlüsselwörter = Python +% E3% 83% A9% E3% 82% Vielen Dank für A4% E3% 83% 96% E3% 83% A9% E3% 83% AA).

In Bezug auf Django war ich den folgenden Seiten besonders dankbar.

Ich habe es geschafft, etwas zu machen, das funktionierte, und ich habe es meinen Arbeitskollegen gezeigt und korrigiert, und es wurde vorerst fertiggestellt. Im Gegensatz zur lokalen Entwicklung können Sie mit Cloud9 die App nur durch Senden der URL anzeigen oder denselben Arbeitsbereich freigeben, wenn Sie einen Kollegen mit einem Cloud9-Konto haben.

Abgesehen davon hat sich mein Verständnis von Django erheblich verbessert, indem ich meinen Kollegen die App erklärt habe, die ich dieses Mal erstellt habe.

Migration von SQLite3 zu PostgreSQL

Nun, dies ist eine fertige App, aber es gibt noch etwas zu tun, bevor Sie sie auf Heroku bereitstellen. Standardmäßig verwendet django SQLite3. Selbst wenn Sie es so wie es ist auf Heroku bereitstellen, wird es vorerst funktionieren, aber es gibt eine solche Beschreibung in der Hilfe von Heroku.

SQLite on Heroku

Kurz gesagt, es scheint, dass "es vorerst funktioniert, aber aufgrund des Mechanismus in bis zu 24 Stunden verschwinden wird". Übrigens habe ich versucht zu sehen, wie lange es verschwinden würde, aber es ist auch nach ungefähr einer Woche nicht verschwunden. Ich weiß nicht, ob es passiert ist oder weil ich jeden Tag überprüfe "Ist es weg?", Aber ich möchte nicht so aufgeregt im Produktionsbetrieb sein, also habe ich mich gehorsam für PostgreSQL entschieden. Hier habe ich auf diesen Artikel [^ 3] und diesen Artikel [^ 4] verwiesen.

Da PostgreSQL ursprünglich im Cloud9-Arbeitsbereich installiert ist, muss es nicht erneut installiert werden. Wenn Sie sich jedoch den Status ansehen, ist es nicht verfügbar. Starten Sie daher den Dienst.

$ psql --version
psql (PostgreSQL) 9.3.11
$ sudo service postgresql status
9.3/main (port 5432): down
$ sudo service postgresql start
 * Starting PostgreSQL 9.3 database server
    ...done.

Installieren Sie die psycopg2-Bibliothek für die Verwendung von PostgreSQL aus Python.

$ sudo pip3 install psycopg2

Melden Sie sich dann bei PostgreSQL an. Bitte beachten Sie, dass es zwei Sudos gibt.

$ sudo sudo -u postgres psql

Erstellen Sie einen Login-Benutzer (in diesem Fall myuser) in der PostgreSQL-Konsole.

postgres=# CREATE ROLE myuser LOGIN;
CREATE ROLE
postgres=# \password myuser
Enter new password: 
Enter it again: 

Erstellen Sie eine Datenbank (in diesem Fall abc) zur Verwendung in der App. In Cloud9 wurde ich wütend über "Neue Codierung (UTF8) ist nicht kompatibel mit der Codierung der Vorlagendatenbank (SQL_ASCII)", ohne die letzte "TEMPLATE template0" hinzuzufügen, aber ich war eine Weile besorgt, weil ich nicht wusste, was ich tun sollte.

postgres=# CREATE DATABASE abc OWNER myuser ENCODING 'UTF8' TEMPLATE template0;                                                                                
CREATE DATABASE
postgres=# \q

Jetzt ist die PostgreSQL-Seite fertig. Bearbeiten Sie dann settings.py im Ordner django project (c9_abc).

#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}   
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'abc',
                # The following settings are not used with sqlite3:
                'USER': ’myuser',
                'PASSWORD': 'your_password_here',
                'HOST': '127.0.0.1', 
                'PORT': 5432, 
            }
}

Der letzte Schritt machte ein wenig süchtig. In den Artikeln, auf die ich verwiesen habe, sind beide mit "python manage.py syncdb" als OK geschrieben, aber in der Versionshinweis von django 1.9 heißt es "Der Befehl syncdb wird entfernt". Diese Funktion kann nicht mehr verwendet werden. Ich werde. Als ich es nachgeschlagen habe, wurde es in Offizielles Dokument von django1.8 beschrieben, und "syncdb" ist "migrieren". Es scheint, dass der Alias einen Schritt zum Erstellen eines Superusers enthält. Das bedeutet

$ python manage.py migrate
$ python manage.py createsuperuser

Das ist ok.

Die Migration sollte nun abgeschlossen sein. Lassen Sie uns für alle Fälle überprüfen, ob die App ordnungsgemäß funktioniert.

In Heroku bereitstellen

Da es sich um eine Vorlage handelt, die ursprünglich von heroku bereitgestellt wurde, werden Dateien (runtime.txt und require.txt), die heroku die Python-Version und die zu installierenden Bibliotheken mitteilen, im Stammordner erstellt. Heroku ist jedoch standardmäßig auch Python 2.7. Ändern Sie daher runtime.txt.

[runtime.txt]
python-3.4.3

Aktualisieren Sie dann auch die Datei resources.txt.

$ pip3 freeze > requirements.txt

Wenn jedoch nichts unternommen wird, werden alle Bibliotheken in der Python3-Umgebung von Cloud9 eingeschlossen. Überprüfen Sie daher den Inhalt und löschen Sie unnötige Bibliothekszeilen. Wenn die Umgebung zuerst mit venv usw. ausgeschaltet wird, müssen keine unnötigen Bibliothekszeilen gelöscht werden. Möglicherweise gibt es Bibliotheksabhängigkeiten. Wenn Sie dies ordnungsgemäß ausführen möchten, schalten Sie zuerst die Umgebung aus.

Installieren Sie dann das Heroku-Toolkit.

$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh

Melden Sie sich nach Abschluss der Installation sofort bei heroku an.

$ heroku login

Diejenigen, die in der Anwendungsentwicklung kein Git-Repository erstellt haben, werden es erstellen.

$ git init
$ git add -A
$ git commit -m 'initial commit'

Erstellen Sie ein App-Repository auf Heroku. Im folgenden Beispiel lautet der App-Name "myherokuapp". Selbst wenn Sie dies nicht hinzufügen, weist Heroku es automatisch zu, es ist jedoch ein langer Name mit etwa 20 Zeichen.

$ heroku create myherokuapp

Dann ist es Zeit für die Bereitstellung.

$ git push heroku master
Counting objects: 130, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (121/121), done.
Writing objects: 100% (130/130), 1.91 MiB | 726.00 KiB/s, done.
Total 130 (delta 52), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-3.4.3
remote:      $ pip install -r requirements.txt
remote:        Collecting Django==1.9.4 (from -r requirements.txt (line 1))
remote:          Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)

(Weggelassen) remote: https://myherokuapp.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy.... done. To https://git.heroku.com/myherokuapp.git * [new branch] master -> master

Nach einer Weile wird die Bereitstellung wie oben abgeschlossen. Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie das Protokoll und die Fehlermeldung und nehmen Sie die erforderlichen Korrekturen vor.

Lasst uns eine Pause machen. Initialisieren Sie die Datenbank und erstellen Sie einen Superuser auf Heroku.

$ heroku run python manage.py migrate
$ heroku run python manage.py createsuperuser

Öffnen wir die URL der App, die während der Bereitstellung angezeigt wurde (https: // myherokuapp.herokuapp.com / `im obigen Beispiel).

Hat es ohne Probleme funktioniert? Schalten Sie dann den Debug-Modus von Django aus. Bearbeiten Sie settings.py in Cloud9.

# DEBUG=True
DEBUG=False

Reflektieren Sie diesen Fix in Heroku.

$ git add .
$ git commit -m 'Debug mode off'
$ git push heroku master

Beachten Sie, dass Sie diese drei Zeilen weiterhin verwenden werden (obwohl Sie den Commit-Kommentar entsprechend ändern können), wenn Sie sie in Zukunft ändern.

Das ist es. Wenn Sie Missverständnisse oder Fehler haben, zögern Sie bitte nicht, uns dies per Bearbeitungsanfrage mitzuteilen. Vielen Dank.


Dieser Artikel wurde von @ hirokiky's PileMd geschrieben.

Referenzartikel

Recommended Posts

Veröffentlichtes Django-Projekt, entwickelt in Cloud9 auf Heroku
DJango-Seite veröffentlicht auf Heroku: Practice
Stellen Sie das Django-Projekt für Heroku bereit
Registrieren Sie die Django-Anwendung im Projekt
Stellen Sie die Django-Anwendung auf Heroku bereit
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Django Blog auf Heroku: Login Implementierung
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Stellen Sie Django api mit Heroku bereit (persönliches Memo)
Hinweise zum Erstellen statischer Dateien mit Django
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
[Django] CSS im Projekt kann nicht gelesen werden
Django Heroku Deploy 1
Redis auf Heroku
Modell in Django
Shimehari auf Heroku
Django-Projektbasislinie
Django Heroku Deploy 2
Form in Django
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
Veröffentlichen Sie Ihre Django-App unter Amazon Linux + Apache + mod_wsgi
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
DJango-Seite auf Heroku veröffentlicht: Vorbereitung mein Suchtpunkt
Verschiedene Hinweise zur Bereitstellung der Django-App auf Heroku
So verweisen Sie auf statische Dateien in einem Django-Projekt