[PYTHON] "Classer les déchets par image!" Journal de création d'application day8 ~ déploiement heroku ~

introduction

"Classer les déchets par image!" Je voudrais enfin déployer aujourd'hui le 8ème jour du journal de création de l'application. Cette fois, nous utiliserons heroku comme PaaS (un service qui fournit une base de données et un environnement d'exécution pour exécuter le logiciel d'application).


Liste d'articles

introduction

Dans ce déploiement, j'utilise Heroku CLI (interface de ligne de commande), mais comme c'est un gros problème (car il y a tellement d'abonnés Linux dans mon université), j'ai construit un environnement où les commandes linux fonctionnent et que Je voudrais le faire dans un environnement (je pense que vous pouvez le télécharger immédiatement en regardant Le CLI Heroku sans ces choses ennuyeuses).

Ajouter Ubuntu

Insérez ubuntu pour que les commandes linux puissent être exécutées. Tout d'abord, installez ubuntu à partir du Microsoft Store. Ubuntu Ensuite, installez le terminal Windows. (Vous pouvez écrire des commandes directement dans ubuntu, mais celle-ci qui peut être utilisée avec l'invite de commande est plus pratique) windows terminal

Maintenant, activons ubuntu sur le terminal Windows. [Comment ajouter un onglet Ubuntu à un terminal Windows dans Windows 10](https://soundartifacts.com/en/how-to/280-how-to-add-ubuntu-tab-to-windows-terminal-in-windows -10.html) a été utilisé comme référence. Tout d'abord, ouvrez ubuntu et obtenez le GUID avec la commande suivante.

$ uuidgen

Ensuite, ouvrez les paramètres à partir de la flèche vers le bas à côté de l'onglet sur le terminal Windows et ajoutez ce qui suit à ist dans les profils.

setting.json


            {
                "acrylicOpacity":0.75,
                "closeOnExit":true,
                "colorScheme":"Campbell",
                "commandline":"wsl.exe -d Ubuntu",
                "cursorColor":"#FFFFFF",
                "cursorShape":"bar",
                "fontFace":"Consolas",
                "fontSize":12,
                "guid":"{GUID obtenu par la procédure ci-dessus}",
                "historySize":9001,
                "icon":"C:/Dummy/image.png ",
                "name":"Ubuntu",
                "padding":"0, 0, 0, 0",
                "snapOnInput":true,
                "startingDirectory":"%USERPROFILE%",
                "useAcrylic":true
            }

Vous devriez maintenant avoir ajouté ubuntu.

commande de brassage

Je n'avais pas de commande brew dans mon environnement, je vais donc commencer par l'installer. Avant cela, mettons à jour le package.

sudo apt update

Ensuite, installez l'infusion.

sudo apt install linuxbrew-wrapper

À l'origine, il devrait être possible de le mettre, mais j'ai eu une erreur ici, alors j'ai présenté Homebrew en me référant à l'article suivant. Je veux aussi utiliser brew sur Windows! Jusqu'à ce que WSL soit installé, le répertoire de base est modifié et le brew est disponible

Installez #brew

En gros, vous pouvez suivre la Documentation.

Tout d'abord, exécutez la commande suivante.

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

Une fois cette opération terminée, exécutez la commande suivante:

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

Enfin, installez les packages dont dépend le brew. Cette fois, c'est Ubuntu, alors procédez comme suit:

sudo apt-get install build-essential curl file git

Vous pouvez maintenant utiliser l'infusion.

Sur la base de cet article, j'ai exécuté la commande suivante.

$ 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

Ensuite, j'ai reçu un avertissement que je pouvais ignorer, donc j'ai pu l'installer conformément à l'article ci-dessus.

Déployer sur heroku

Maintenant, nous allons enfin nous connecter à heroku. Dans le terminal ubuntu du terminal Windows, procédez comme suit:

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

La commande sur la troisième ligne ne fonctionnait pas si le répertoire du projet et le répertoire de gestion git étaient différents, j'ai donc ajouté la partie --pythonpath garbage_proj. La structure était comme ça. garbage (répertoire de gestion git) └garbage_proj (répertoire du projet)

Nous modifierons également les paramètres de déploiement. Pour le moment, je peaufine les paramètres afin qu'il puisse être déployé au minimum, donc c'est insuffisant en termes de sécurité pour l'opération de production.

# TEMPLATES>context_Ajouté pour gérer les images dans les processeurs
                'django.template.context_processors.media',

#Ajouter des paramètres pour heroku
import django_heroku #ajouter à
django_heroku.settings(locals()) #ajouter à

#SQLite3 ne fonctionne pas sur Heroku, alors changez-le ou laissez-le vide si vous n'en avez pas besoin
DATABASES = {}

ALLOWED_HOSTS = ['.herokuapp.com']

À l'origine, DEBUG = False doit également être défini. Cependant, comme «Server Error (500)» s'est produite, elle est exécutée telle quelle.

Installez également la bibliothèque Python requise pour le déploiement. De plus, le terminal ubuntu contient python pour le système ubuntu (?), Vous devez donc l'exécuter dans un terminal normal.

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

Comme requirements.txt n'a pas construit d'environnement virtuel, toutes les bibliothèques locales ont été écrites, donc je n'ai fait que les nécessaires (point de réflexion). Cela ressemble à ce qui suit.

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

Maintenant, connectons-nous à heroku.

heroku login
heroku create garbageeycjur(app name)
heroku config:set SECRET_KEY="(setting.clé secrète en py)
git push heroku master

heroku ps:scale web=1
(Pas de paramètres de base de données ok)
heroku open

Références: Comment déployer l'application Django sur Heroku

Si tout se passe bien, vous devriez pouvoir utiliser uniquement le code ci-dessus, mais bien sûr, vous obtiendrez une erreur, alors corrigez-la de différentes manières.

Tout d'abord, si vous n'avez pas besoin de collectstatic, qui a une fonction pour gérer les fichiers statiques (pour plus de détails, copiez le répertoire statique de chaque application dans un répertoire spécifié), vous recevrez un message vous demandant de définir la variable d'environnement DISABLE_COLLECTSTATIC. , Entrez la commande suivante exactement comme il a été dit.

heroku config:set DISABLE_COLLECTSTATIC=1

Si vous obtenez des erreurs ici, jetez un œil au code ci-dessous

heroku logs --tail

Lorsque vous exécutez ce code, un lien comme une activité sur heroku apparaîtra, afin que vous puissiez voir le contenu détaillé de l'erreur en le regardant.

En outre, vous pouvez mettre à jour après avoir déployé une fois avec la commande suivante.

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

J'ai écrit que cela semblait fonctionner jusqu'à présent, mais malheureusement, je suis mort avec l'erreur suivante.

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

Bref, ça mange trop de capacité. La cause de ceci est principalement tensolflow, mais lorsque je rétrograde tensolflow (et keras), le modèle ne fonctionne pas cette fois.

Donc, le modèle ne fonctionne pas, mais je l'ai déployé pour le moment, alors portez une attention particulière à la barre latérale sur l'écran du smartphone.

URL: Classer les déchets par image! Classer les déchets par image! Cela ne se terminera pas tel quel, donc je le redéployerai autour de python n'importe où à une date ultérieure. En outre, je serais reconnaissant à toute personne ayant les connaissances nécessaires pour résoudre l'erreur par des moyens autres que de charger et de recréer le modèle.

Références

Recommended Posts

"Classer les déchets par image!" Journal de création d'application day8 ~ déploiement heroku ~
"Classification des déchets par image!" Journal de création d'application jour3 ~ Application Web avec Django ~
"Classer les déchets par image!" Journal de création d'application jour6 ~ Correction de la structure des répertoires ~
"Classer les déchets par image!" Journal de création d'application jour1 ~ Création de l'ensemble de données ~
"Classer les déchets par image!" Journal de création d'application day5 ~ Préparez le frontal avec Bootstrap 2 ~
"Classer les déchets par image!" Journal de création d'application day4 ~ Préparez le frontal avec Bootstrap ~
Deep learning 2 appris par l'implémentation (classification d'images)