User Tools

Site Tools


server:openeats

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
server:openeats [2017/11/08 16:05] – Autostart hinzugefügt saschaserver:openeats [2019/02/16 19:48] (current) – Probleme bei größeren MariaDB-Updates, nicht gefundene library ergänzt sascha
Line 163: Line 163:
 Der Befehl ''npm install'' dauert eine Weile; dabei ist es wichtig, ihn als root und nicht mit sudo auszuführen, da die Installation der Pakete sonst aufgrund fehlender Schreibrechte fehlschlägt, bzw. in eine Endlosschleife laufen kann! Der Befehl ''npm install'' dauert eine Weile; dabei ist es wichtig, ihn als root und nicht mit sudo auszuführen, da die Installation der Pakete sonst aufgrund fehlender Schreibrechte fehlschlägt, bzw. in eine Endlosschleife laufen kann!
  
-Ist die Installation abgeschlossen, können wir den Node-Server starten. Dabei ist das Setzen der Umgebungsvariablen wichtig, da ''webpack'' (js Kram...) sonst Fehler liefert:+Ist die Installation abgeschlossen, muss in der Konfiguration von ''webpack'' noch ein Problem behoben werden. Es wird für die Ausgabe ein absoluter Pfad erwartet, allerdings stimmt dieser nicht, somit wird die erzeugte Datei ''bundle.js'' nicht in ein Verzeichnis geschrieben. Dazu in der Datei ''webpack.config.js'' im aktuellen Verzeichnis ganz oben bei den ''const'' Ausdrücken die Zeile 
 +  const path = require('path'
 +anfügen sowie weiter unten im Teil ''module-exports = {'' unter dem Punkt ''output: {'' die Zeile 
 +  path: '/code/public', 
 +abändern zu 
 +  path: path.resolve(__dirname, 'public'), 
 + 
 +Damit können wir nun den Node-Server starten. Dabei ist das Setzen der Umgebungsvariablen wichtig, da ''webpack'' (js Kram...) sonst Fehler liefert:
   # NODE_ENV=production NODE_LOCALE=de NODE_API_URL=https://food.domain.tld npm start   # NODE_ENV=production NODE_LOCALE=de NODE_API_URL=https://food.domain.tld npm start
 Nun sollte alles funktionieren und mit dem Aufruf der URL https://food.domain.tld im Browser sollte die eigentliche Oberfläche zur Anzeige der Rezepte erscheinen. Nun sollte alles funktionieren und mit dem Aufruf der URL https://food.domain.tld im Browser sollte die eigentliche Oberfläche zur Anzeige der Rezepte erscheinen.
 +
 +__Hinweis__: Sollte es beim Starten zu einem Fehler kommen,
 +>ERROR in ./modules/common/history.js
 +>Module not found: Error: Can't resolve 'history' in '/usr/share/webapps/openeats/frontend/modules/common'
 +muss das ''history''-Modul explizit installiert werden:
 +  # npm install --save history
 +siehe [[server:openeats#history-modul_nicht_gefunden|Troubleshooting]].
  
  
Line 283: Line 297:
  
 Nun sollte alles nach einem Neustart automatisch gestartet werden, wobei die entsprechende Startzeit für den Node-Server beachtet werden sollte. Nun sollte alles nach einem Neustart automatisch gestartet werden, wobei die entsprechende Startzeit für den Node-Server beachtet werden sollte.
 +
 +
 +===== Troubleshooting =====
 +
 +==== Inkompatibles / nicht vorhandenes npm-Modul ====
 +
 +Sollte es, aus welchen Gründen auch immer, ein Problem mit einem Modul geben, da es beispielsweise für die Architektur nicht angeboten wird, kann es auch einfach selbst aus den Quellen gebaut werden. Dies kann sich unter anderem beim Starten des npm-Servers in einem Fehlerstring wie beispielsweise
 +> ERROR in Node Sass does not yet support your current environment: Linux Unsupported architecture (arm) with Unsupported runtime (59)
 +äußern. In einem solchen Fall kann das Modul, in diesem Falle ''node-sass'', einfach mit einem
 +  # npm rebuild node-sass
 +selbst für die aktuell verwendete Plattform kompiliert werden.
 +
 +==== Update node.js ====
 +
 +Wurde ''nodejs'' aktualisiert, kann es leicht Probleme mit bereits vorhandenen Modulen geben, insbesondere bei einem Update zu einer neuen Major-Version. Um dies zu vermeiden, ist es sinnvoll, den kompletten Ordner mit den Modulen zu löschen und sie neu zu installieren:
 +  # cd /usr/share/webapps/openeats/frontend
 +  # rm -rf node_modules
 +  # npm install
 +
 +==== history-Modul nicht gefunden ====
 +
 +Speziell nach dem Update von ''nodejs'' auf Version 9.2 und einem einhergehenden Pull des aktuellen OpenEats-Repository trat bei mir während des Starten des node-Servers der folgende Fehler auf:
 +> ERROR in ./modules/common/history.js
 +> Module not found: Error: Can't resolve 'history' in '/usr/share/webapps/openeats/frontend/modules/common'
 +
 +Scheinbar wurde das ''history''-Modul von React nicht mitinstalliert, was bisher (und vernünftige Konfiguration vorausgesetzt standardmäßig) der Fall sein sollte. Um dieses Problem zu beheben, kann das Paket manuell mittels
 +  # npm install --save history
 +der Installation hinzugefügt werden.
 +
 +==== Update Python, Upgrade der virtuellen Umgebung ====
 +
 +Die angelegte virtuelle Umgebung unter ''virt_env'' muss unter Umständen aktualisiert werden, beispielsweise nach einem Upgrade von Python selbst auf ein neues Release. Dies kann dazu führen, dass beim Versuch, den Server innerhalb der virtuellen Umgebung mit ''./api/manage.py runserver'' manuell zu starten, zu Fehlern wie
 +> python: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
 +erscheint. Grund ist hier das Upgrade von Python 3.6 auf 3.7.
 +
 +Um ein Update durchführen zu können, ermitteln wir der Einfachheit halber alle installierten Module, um sie nachher einfach wieder zu installieren. Dazu muss die Python-Version mittels Downgrade auf die letzte funktionierende Version gesetzt werden. Am besten wurde der Cache der ''pacman''-Pakete nicht geleert, so kann in ''/var/cache/pacman/pkg'' nach den vorhandenen alten Python-Paketen gesucht werden, in meinem Fall die Version 3.6.6. Diese installieren wir:
 +  # pacman -U /var/cache/pacman/pkg/python-3.6.6-1-armv7h.pkg.tar.xz
 +
 +Nun kann die virtuelle Umgebung aktiviert werden, um die verwendeten Module zu ermitteln:
 +  # source virt_env/bin/activate
 +  # pip freeze > requirements.txt
 +  # deactivate
 +  # mv virt_env virt_env_bak
 +Bei dem letzten Schritt wird die Umgebung als Backup in einen neuen Ordner verschoben.
 +
 +Anschließend kann Python wieder aktualisiert werden:
 +  # pacman -S python
 +
 +Bei mir ist in der Liste der Module in ''requirements.txt'' das Modul ''openeats-recipe-scraper'' aufgetaucht. Dies gehört zu OpenEats und kann entsprechend nicht mit ''pip'' installiert werden. Die Zeile mit diesem Modul muss noch aus der Textdatei gelöscht werden.
 +
 +Die neue Umgebung kann nun eingerichtet werden:
 +  # mkdir virt_env
 +  # virtualenv virt_env/
 +  # source virt_env/bin/activate
 +  # pip install --upgrade -r requirements.txt
 +
 +Wird nun versucht, den Server manuell mit ''./api/manage.py runserver'' zu starten, sollte es keine Fehlermeldung mehr geben. Wir können die virtuelle Umgebung mit ''deactivate'' wieder verlassen und das Backup ''virt_env_bak'' kann entsprechend gelöscht werden, wenn alles funktioniert hat.
 +
 +==== Update MariaDB, Django-Server startet nicht ====
 +
 +Es kann passieren, dass es nach einem größeren Update von MariaDB, welches MySQL zur Verfügung stellt, Probleme beim Start des Django-Servers gibt. Dies zeigt sich darin, dass keine Bilder oder Rezepte geladen/gefunden werden. Wird wie weiter oben beschrieben versucht, den Server manuell mittels ''./api/manage.py runserver'' zu starten, tauchen in diesem Fall sehr viele Probleme auf sowie ganz am Ende etwas wie
 +> django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: libmysqlclient.so.18: cannot open shared object file: No such file or directory
 +
 +In diesem Fall reicht es, das Python-Paket ''mysqlclient'' neu zu installieren, damit die neue Version die im System vorhandene Bibliothek wieder findet. Zur Sicherheit kann analog zum vorherigen Punkt ein Backup angelegt werden. Für das Update selber wechseln wir ins passende OpenEats-Verzeichnis, wechseln in die angelegte virtuelle Umgebung und führen das Paket-Update mittels ''pip'' durch:
 +    # source virt_env/bin/activate
 +    # pip uninstall mysqlclient
 +    # pip install mysqlclient
 +    # deactivate
 +
 +Mit dem letzten Befehl wird die virtuelle Umgebung wieder verlassen. Hat alles geklappt, sollte der Aufruf von ''./api/manage.py runserver'' nun zum gewünschten Resultat führen.
 +
 +
server/openeats.1510157126.txt.gz · Last modified: by sascha