[PYTHON] "Klassifizieren Sie Müll nach Bild!" App-Erstellungstagebuch Tag8 ~ Heroku-Bereitstellung ~

Einführung

"Müll nach Bild klassifizieren!" Heute, am 8. Tag des Tagebuchs zur App-Erstellung, möchte ich ihn endlich bereitstellen. Dieses Mal werden wir Heroku als PaaS verwenden (ein Dienst, der eine Datenbank und eine Ausführungsumgebung zum Ausführen von Anwendungssoftware bereitstellt).


Artikelliste

Einführung

In dieser Bereitstellung verwende ich Heroku CLI (Befehlszeilenschnittstelle), aber da es eine große Sache ist (weil es an meiner Universität so viele Linux-Follower gibt), habe ich eine Umgebung erstellt, in der Linux-Befehle funktionieren und so weiter Ich würde es gerne in einer Umgebung tun (ich denke, Sie können es sofort herunterladen, indem Sie sich The Heroku CLI ansehen, ohne solche nervigen Dinge).

Fügen Sie Ubuntu hinzu

Fügen Sie ubuntu ein, damit Linux-Befehle ausgeführt werden können. Installieren Sie zunächst Ubuntu aus dem Microsoft Store. Ubuntu Installieren Sie dann das Windows-Terminal. (Sie können den Befehl direkt in Ubuntu schreiben, aber dieser Befehl, der zusammen mit der Eingabeaufforderung verwendet werden kann, ist bequemer.) windows terminal

Jetzt aktivieren wir Ubuntu auf dem Windows-Terminal. [Hinzufügen einer Ubuntu-Registerkarte zu einem Windows-Terminal in Windows 10](https://soundartifacts.com/de/how-to/280-how-to-add-ubuntu-tab-to-windows-terminal-in-windows -10.html) wurde als Referenz verwendet. Öffnen Sie zunächst Ubuntu und rufen Sie die GUID mit dem folgenden Befehl ab.

$ uuidgen

Öffnen Sie dann die Einstellungen über den Abwärtspfeil neben der Registerkarte im Windows-Terminal und fügen Sie Folgendes zu den Profilen hinzu.

setting.json


            {
                "acrylicOpacity":0.75,
                "closeOnExit":true,
                "colorScheme":"Campbell",
                "commandline":"wsl.exe -d Ubuntu",
                "cursorColor":"#FFFFFF",
                "cursorShape":"bar",
                "fontFace":"Consolas",
                "fontSize":12,
                "guid":"{GUID erhalten durch das obige Verfahren}",
                "historySize":9001,
                "icon":"C:/Dummy/image.png ",
                "name":"Ubuntu",
                "padding":"0, 0, 0, 0",
                "snapOnInput":true,
                "startingDirectory":"%USERPROFILE%",
                "useAcrylic":true
            }

Sie sollten jetzt Ubuntu hinzugefügt haben.

Braubefehl

Ich hatte keinen Braubefehl in meiner Umgebung, daher beginne ich mit der Installation. Vorher aktualisieren wir das Paket.

sudo apt update

Dann installieren Sie Brew.

sudo apt install linuxbrew-wrapper

Ursprünglich sollte es möglich sein, es einzufügen, aber hier ist ein Fehler aufgetreten. Deshalb habe ich Homebrew anhand des folgenden Artikels vorgestellt. Ich möchte Brew auch unter Windows verwenden! Bis zur Installation der WSL wird das Home-Verzeichnis geändert und Brew ist verfügbar

Installieren Sie #brew

Grundsätzlich können Sie der [Dokumentation] folgen (https://docs.brew.sh/Homebrew-on-Linux).

Führen Sie zunächst den folgenden Befehl aus.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"

Führen Sie anschließend den folgenden Befehl aus:

test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

Installieren Sie abschließend die Pakete, von denen das Brauen abhängt. Diesmal ist es Ubuntu, also gehen Sie wie folgt vor:

sudo apt-get install build-essential curl file git

Jetzt können Sie Brew verwenden.

Basierend auf diesem Artikel habe ich den folgenden Befehl ausgeführt.

$ brew doctor

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and which additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew-provided
script of the same name. We found the following "config" scripts:
  /mnt/c/Strawberry/c/bin/gdlib-config
  /mnt/c/Strawberry/c/bin/libpng-config
  /mnt/c/Strawberry/c/bin/libpng16-config
  /mnt/c/Strawberry/c/bin/xml2-config
  /mnt/c/Strawberry/c/bin/xslt-config
  /mnt/c/Strawberry/perl/bin/pkg-config
  /mnt/c/Users/muto/Anaconda3/Library/bin/icu-config

Dann erhielt ich eine Warnung, die ich ignorieren konnte, sodass ich sie gemäß dem obigen Artikel installieren konnte.

In Heroku bereitstellen

Jetzt werden wir uns endlich mit Heroku verbinden. Gehen Sie im Ubuntu-Terminal des Windows-Terminals wie folgt vor:

brew tap heroku/brew && brew install heroku
cd Documents/programing/django/garbage
echo web: gunicorn --pythonpath garbage_proj garbage_proj.wsgi --log-file -
echo python-3.7.4 > runtime.txt

Der Befehl in der dritten Zeile funktionierte nicht, wenn das Projektverzeichnis und das Git-Verwaltungsverzeichnis unterschiedlich waren. Deshalb habe ich den Teil --pythonpath garbage_proj hinzugefügt. Die Struktur war so. Müll (Git-Management-Verzeichnis) └garbage_proj (Projektverzeichnis)

Wir werden auch die Einstellungen für die Bereitstellung ändern. Zur Zeit optimiere ich die Einstellungen so, dass sie mindestens bereitgestellt werden können, sodass sie hinsichtlich der Sicherheit für den Produktionsbetrieb nicht ausreichen.

# TEMPLATES>context_Hinzugefügt, um Bilder in Prozessoren zu verarbeiten
                'django.template.context_processors.media',

#Fügen Sie Einstellungen für Heroku hinzu
import django_heroku #hinzufügen
django_heroku.settings(locals()) #hinzufügen

#SQLite3 funktioniert nicht mit Heroku. Ändern Sie es also oder lassen Sie es leer, wenn Sie es nicht benötigen
DATABASES = {}

ALLOWED_HOSTS = ['.herokuapp.com']

Ursprünglich sollte auch "DEBUG = False" gesetzt werden. Da jedoch "Server Error (500)" aufgetreten ist, wird es so ausgeführt, wie es ist.

Installieren Sie außerdem die für die Bereitstellung erforderliche Python-Bibliothek. Darüber hinaus enthält das Ubuntu-Terminal Python für das Ubuntu-System (?). Sie müssen es also in einem normalen Terminal ausführen.

pip install gunicorn
pip install django-heroku
pip install dj-database-url
pip freeze > requirements.txt

Da require.txt keine virtuelle Umgebung erstellt hat, wurden alle lokalen Bibliotheken ausgeschrieben, sodass ich nur die erforderlichen erstellt habe (Reflexionspunkt). Es sieht wie folgt aus.

bootstrap4==0.1.0
Django==3.0.8
django-bootstrap4==2.2.0
django-heroku==0.3.1
django-mathfilters==1.0.0
numpy==1.18.2
pandas==1.0.3
Pillow==7.1.1
gunicorn==20.0.4
dj-database-url==0.5.0
matplotlib==3.2.1
tensorflow==2.0.0
Keras==2.4.0

Jetzt verbinden wir uns mit Heroku.

heroku login
heroku create garbageeycjur(app name)
heroku config:set SECRET_KEY="(setting.geheimer Schlüssel in py)
git push heroku master

heroku ps:scale web=1
(Keine Datenbankeinstellungen ok)
heroku open

Referenzen: So stellen Sie die Django-App für Heroku bereit

Wenn alles gut geht, sollten Sie in der Lage sein, den obigen Code alleine zu verwenden, aber natürlich wird ein Fehler angezeigt. Beheben Sie ihn daher auf verschiedene Arten.

Wenn Sie nicht collectstatic benötigen, das über eine Funktion zum Verarbeiten statischer Dateien verfügt (für Details kopieren Sie das statische Verzeichnis für jede Anwendung in das angegebene Verzeichnis), wird eine Meldung angezeigt, in der Sie aufgefordert werden, die Umgebungsvariable DISABLE_COLLECTSTATIC festzulegen. Geben Sie den folgenden Befehl genau so ein, wie er angegeben wurde.

heroku config:set DISABLE_COLLECTSTATIC=1

Wenn hier Fehler auftreten, sehen Sie sich den folgenden Code an

heroku logs --tail

Wenn Sie diesen Code ausführen, wird ein Link wie eine Aktivität auf Heroku angezeigt, sodass Sie den detaillierten Fehlerinhalt sehen können, indem Sie ihn betrachten.

Darüber hinaus können Sie nach einmaliger Bereitstellung mit dem folgenden Befehl aktualisieren.

heroku login
git push heroku master
heroku ps:scale web=1
heroku open

Ich schrieb, dass es bisher zu funktionieren schien, aber leider starb ich mit dem folgenden Fehler.

Compiled slug size: 〇〇M is too large (max is 500M).

Kurz gesagt, es frisst zu viel Kapazität. Die Ursache dafür ist meistens Tensolflow, aber wenn ich Tensolflow (und Keras) herunterstufe, funktioniert das Modell diesmal nicht.

Das Modell funktioniert also nicht, aber ich habe es vorerst bereitgestellt. Achten Sie daher besonders auf die Seitenleiste auf dem Smartphone-Bildschirm.

URL: Müll nach Bild klassifizieren! Müll nach Bild klassifizieren! Es wird nicht so enden, wie es ist, also werde ich es zu einem späteren Zeitpunkt irgendwo um Python herum erneut bereitstellen. Ich wäre auch dankbar, wenn jemand das Wissen hätte, den Fehler durch andere Mittel als das Laden und Neuerstellen des Modells zu beheben.

Verweise

Recommended Posts

"Klassifizieren Sie Müll nach Bild!" App-Erstellungstagebuch Tag8 ~ Heroku-Bereitstellung ~
"Klassifizierung von Müll nach Bild!" App-Erstellungstagebuch Tag3 ~ Webanwendung mit Django ~
"Müll nach Bild klassifizieren!" App-Erstellungstagebuch Tag6 ~ Korrektur der Verzeichnisstruktur ~
"Müll nach Bild klassifizieren!" App-Erstellungstagebuch Tag1 ~ Datensatzerstellung ~
"Müll nach Bild klassifizieren!" App-Erstellungstagebuch Tag5 ~ Bereiten Sie das Frontend mit Bootstrap 2 ~ vor
"Müll nach Bild klassifizieren!" App-Erstellungstagebuch Tag4 ~ Bereiten Sie das Frontend mit Bootstrap ~ vor
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)