Jetzt bräuchte ich Hilfe beim Hochladen in uberspace

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

sparrow hat geschrieben: Sonntag 5. März 2023, 20:29 Die Frage ist, was passiert, wenn du da yes eingibst?
"0 static files copied to '/home/rechentrainer/staticfiles', 142 unmodified"
... irgendwie scheint das ja zu klappen, aber wahrscheinlich nicht da, wo es hin soll.
sparrow hat geschrieben: Sonntag 5. März 2023, 20:29 Es gibt also

Code: Alles auswählen

BASE_DIR /"static"
nicht.
Wie ist denn der Wert von BASE_DIR?
in meinen settings.py steht: "BASE_DIR = Path(__file__).resolve().parent.parent" ... was immer das auch bedeuten mag.
Es gibt ja den Spruch: "Ist der Ruf erst ruiniert, lebt es sich ganz ungeniert":
In der Zwischenzeit habe ich ja bewiesen, dass ich keine Ahnung habe. Ich muss zugeben, dass mir auch nicht klar ist, wie man die Links zu Verzeichnissen anlegt und vor allem die Bedeutung des Backslashes". Ich würde ja meine "staticfiles" woanders speichern wenn ich wüsste wie das geht.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ich weiß leider nicht, welche Links zu Verzeichnissen oder Backslashes meinst. Vielleicht musst du das näher ausführen.

Was

Code: Alles auswählen

BASE_DIR = Path(__file__).resolve().parent.parent
macht, kann man im Zweifelsfall in der Dokumentation nachlesen.

Code: Alles auswählen

Path(__file__).resolve() # = der Pfad zu dem Script in dem die Zeile steht.
Path(__file__).resolve().parent # = der Pfad zum Parent des Scripts in dem die Zeile steht = das Verzeichnis in dem die Datei liegt
Path(__file__).resolve().parent.parent # = der Pfad zum Verzeichnis, in dem das Verzeichnisses liegt,  in dem das Script liegt, in dem die Zeile steht
Angenommen deine settings.py ist hier: /home/user/project/app/settings.py (in den Kommentaren immer der anschließende Wert)

Code: Alles auswählen

# in /home/user/project/app/settings.py
BASE_DIR = Path(__file__).resolve().parent.parent
# BASE_DIR = /home/user/project/
STATICFILES_DIRS = [BASE_DIR /"static"] 
# STATICFILES_DIRS = [/home/user/project/static] 
Du musst also schauen ob dein static Verzeichnis, aus dem kopiert werden soll, wirklich an der Stelle liegt.
Oder Pfad entsprechend anpassen.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

sparrow hat geschrieben: Sonntag 5. März 2023, 21:54

Code: Alles auswählen

Path(__file__).resolve() # = der Pfad zu dem Script in dem die Zeile steht.
Path(__file__).resolve().parent # = der Pfad zum Parent des Scripts in dem die Zeile steht = das Verzeichnis in dem die Datei liegt
Path(__file__).resolve().parent.parent # = der Pfad zum Verzeichnis, in dem das Verzeichnisses liegt,  in dem das Script liegt, in dem die Zeile steht
Die settings.py liegen im Ordner "rechentrainer" und dieser wiederum im Ordner rechentrainer_kopie(1).
Bild
Also müsste die Datei "static" (mit den CSS Dateien meines "layout" Templates dort hin, ist es ja auch - oder verwechsle ich das jetzt wieder mit dem Ordner "staticfiles" (der meine "collectstatic" Dateien aufnimmt (wahrscheinlich schon)? Ich habe CSS Dateien im Ordner "rechentrainer_Kopie(1) und in den Ordnern "accounts.static" und "core.static". Diese und die aus "staic" finde ich dann auch nach "collectstatic" in "staticfiles" - was ist falsch?
sparrow hat geschrieben: Sonntag 5. März 2023, 21:54 Ich weiß leider nicht, welche Links zu Verzeichnissen oder Backslashes meinst. Vielleicht musst du das näher ausführen.
Ich muss zu meiner Schande gestehen, dass es mir nicht klar ist, was der Unterschied ist von "static" zu "/static" :?
Vielleicht wäre es hilfreich, wenn ich dies verstünde:

Code: Alles auswählen

STATIC_ROOT = "staticfiles"
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR /"static"] 
also das erste, dachte ich, legt fest, wo die "collectstatic" Dateien gespeichert werden (das sind ja die gleichen, die in den beiden Apps und in dem Ordner "static" im Rootverzeichnis liegen.
Was machen die anderen beiden?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

sparrow hat geschrieben: Sonntag 5. März 2023, 21:54 Was

Code: Alles auswählen

BASE_DIR = Path(__file__).resolve().parent.parent
macht, kann man im Zweifelsfall in der Dokumentation nachlesen.
Wobei man zum Aufsteigen mehrerer Ebenen alternativ das ``parents``-Attribut (also in der Mehrzahl) nutzen kann:

Code: Alles auswählen

BASE_DIR = Path(__file__).resolve().parents[1]
Dabei steht der Index für die Anzahl der aufzusteigenden Ebenen (0-basiert natürlich).
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wo kopierst du die statischen Dateien denn bei Uberspace hin? Und welche URL erhältst du, wenn du bei der produktiv Version auf Uberspace im HTML Code auf einen Link für eine statischen Datei klickst?

`STATIC_ROOT` ist ja das, was für den produktiv laufenden Server relevant ist.

BTW, um nochmal darauf zurück zu kommen: genau diese "Durcheinander" kann man mit Whitenoise verhindern. Bzw. man braucht dann sich keine Gedanken mehr über den Webserver zum Ausliefern von statischen Dateien machen, weil Django das via Whitenoise selber macht. Macht IMHO das Deployment einfacher.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Ob ihr es glaubt oder nicht:
Ich habe jetzt zwei Tage lang versucht, meine Webseite bei Uberspace mit CSS zu füllen. Jetzt geht es - aber so kann es wohl nicht bleiben:
Wenn ich in den settings.py Debug auf "False" stelle, sind die CSS Einstellungen weg, bei True geht allles wieder - auch auf meiner lokalen Installation.
Was mache ich jetzt???
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

noisefloor hat geschrieben: Montag 6. März 2023, 08:35 wo kopierst du die statischen Dateien denn bei Uberspace hin? Und welche URL erhältst du, wenn du bei der produktiv Version auf Uberspace im HTML Code auf einen Link für eine statischen Datei klickst?
Die gesammelten CSS Dateien sind in rt/rechentrainer/staticfiles (dem Rootverzeichnis - kann man das so nennen?). Ich hatte Kontakt mit dem support von uberspace, Jonas sagt, ich brauche kein collectstatic auf dem Server durchzuführen, das kann ich genauso lokal machen und den Ordner hochladen.

Was meinst du mit "Und welche URL erhältst du, wenn du bei der produktiv Version auf Uberspace im HTML Code auf einen Link für eine statischen Datei klickst?", wie komme ich an einen entsprechenden Link, die CSS Datein sind ja alle nicht verbunden.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Wenn DEBUG=True in der settings.py aktiv ist, dann wird STATIC_ROOT nicht verwendet sondern über den Interpreter direkt aus den Apps ausgeliefert.
Das möchte man nicht. Genausowenig, wie man DEBUG=True auf einem produktiven und von außen erreichbaren System aktiv haben möchte.
Zuletzt geändert von sparrow am Montag 6. März 2023, 19:15, insgesamt 2-mal geändert.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

OK, und was mache ich damit jetzt?
In settings.py steht:

Code: Alles auswählen

BASE_DIR = Path(__file__).resolve().parent.parent

STATIC_ROOT = BASE_DIR /"staticfiles"
STATIC_URL = '/static/'

STATICFILES_DIRS = [BASE_DIR /"static"] 
... und das hat doch auch mal funktioniert - oder nicht? Keine Ahnung, hier, lokal, hatte ich ja debug=True und der Fehler trat ja erst auf, nachdem ich das umgestellt habe. Allerdings hat es auf dem Server von pythonanywhere ja noch funktioniert.

Was mache ich jetzt? Was stimmt mit meinen Einstellungen nicht???
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Grundsätzlich:
Hier ist vielleicht die Dokumentation zu static files einmal anzuschauen und die Anleitung wie man die deployed.

Nochmal zur Erklärung:
STATIC_ROOT ist das Verzeichnis in dem die Dateien abgelegt werden, die mit collectstatic gesammelt werden.
STATICFILES_DIRS sind die Verzeichnisse, aus denen die staticfiles gesammelt werden.
STATIC_URL ist die URL, über die die Staticfles erreichbar sind. Das hat gar nichts mit Verzeichnissen zu tun, sondern mit der URL im Browser. Das wird zum Beispiel verwendet, wenn man den {% static %} Tag in Templates verwendet.

Wenn du collectstatic verwenden willst:
Auf deinem Screenshot ist zu sehen, dass die einzelnen Apps auch static-Ordner haben. Liegen die Dateien darin oder in dem static-Ordner in rechentrainer_Kopie(1)?

Wenn deine Dateien jetzt alle in staticfiles liegen - wie auch immer die dorthin gekommen sind - müsste doch alles funktionieren?
Wenn nicht:
Wo _GENAU_ befindet sich das Verzeichnis /staticfiles? Und zwar von / an.

Wie wird die URL /static bereitgestellt?
Da du hier den Hinweis auf whitenoise ignorierst, muss das der Webbrowser tun.
Wie ist der Browser konfiguiert um die URL /static auf ein Verzeichnis abzubilden?
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

sparrow hat geschrieben: Montag 6. März 2023, 19:35 Da du hier den Hinweis auf whitenoise ignorierst, muss das der Webbrowser tun.
Das ist jetzt keine böse Absicht, ich habe da mal reingeschaut - das ist wieder eine neue Baustelle, das ist nicht getan mit Klick und alles geht. Könnt ihr verstehen, dass ich damit überfordert bin? Ich habe das Gefühl, mein Problem hängt zurzeit nur daran, dass ich einen Link nicht richtig benannt habe. Ich habe schon einige Kolleginnen und Kollegen, die mit meinem Rechentrainer arbeiten und ohne CSS ist der zurzeit sehr "gewöhnungsbedürftig". Ich lasse ihn jetzt mit DEBUG=True laufen.
sparrow hat geschrieben: Montag 6. März 2023, 19:35 STATIC_ROOT ist das Verzeichnis in dem die Dateien abgelegt werden, die mit collectstatic gesammelt werden.
Das zumindest habe ich kapiert und da scheint ja auch das Problem beheimatet zu sein.
sparrow hat geschrieben: Montag 6. März 2023, 19:35 STATICFILES_DIRS sind die Verzeichnisse, aus denen die staticfiles gesammelt werden.
Das sind aber zwei "accounts/static/accounts" und "core/static/core", sowie der Ordenr "static".
sparrow hat geschrieben: Montag 6. März 2023, 19:35 STATIC_URL ist die URL, über die die Staticfles erreichbar sind. Das hat gar nichts mit Verzeichnissen zu tun, sondern mit der URL im Browser. Das wird zum Beispiel verwendet, wenn man den {% static %} Tag in Templates verwendet.
... das überfordert mich schon wieder etwas.
sparrow hat geschrieben: Montag 6. März 2023, 19:35 Wenn du collectstatic verwenden willst:
Auf deinem Screenshot ist zu sehen, dass die einzelnen Apps auch static-Ordner haben. Liegen die Dateien darin oder in dem static-Ordner in rechentrainer_Kopie(1)?
In den Ordnern "accounts/static/accounts" und "core/static/core" liegen die CSS Dateien, die ich in den Templates dieser Apps benötige und in "static" (im Rootverzeichnis) liegen die beiden CSS Dateien "layout.css" und "auswahl.css" die den Templates zugeordnet sind, die ich in den anderen templates einfüge (so habe ich es in meinem Tutorium gelernt).
sparrow hat geschrieben: Montag 6. März 2023, 19:35 Wenn deine Dateien jetzt alle in staticfiles liegen - wie auch immer die dorthin gekommen sind - müsste doch alles funktionieren?
Wenn nicht:
Wo _GENAU_ befindet sich das Verzeichnis /staticfiles? Und zwar von / an.
Ja eben - sollten sie! Tun sie aber nicht. Sie kommen dahin, wenn ich "collectstatic" ausführe.
"staticfiles" kann man doch auch im Screenshot sehen, es befindet sich im Rootverzeichnis - parallel zu meinen Apps "accounts" und "core".
Bild
sparrow hat geschrieben: Montag 6. März 2023, 19:35 Wie wird die URL /static bereitgestellt?
Da du hier den Hinweis auf whitenoise ignorierst, muss das der Webbrowser tun.
Wie ist der Browser konfiguiert um die URL /static auf ein Verzeichnis abzubilden?
Das, mit Verlaub, verstehe ich nicht. Bei "collectstatic" werden alle meine CSS Dateien "eingesammelt" und in "staticfiles" gespeichert:

und in uberspace habe ich
[rt@caelum rechentrainer]$ uberspace web backend set --apache /staticfiles
ausgeführt. ... Ist es das?
Benutzeravatar
grubenfox
User
Beiträge: 411
Registriert: Freitag 2. Dezember 2022, 15:49

sparrow hat geschrieben: Montag 6. März 2023, 19:35 Wie wird die URL /static bereitgestellt?
Da du hier den Hinweis auf whitenoise ignorierst, muss das der Webbrowser tun.
Wie ist der Browser konfiguiert um die URL /static auf ein Verzeichnis abzubilden?
Webbrowser? Doch wohl der Webserver?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Pitwheazle hat geschrieben: Montag 6. März 2023, 21:55 Das, mit Verlaub, verstehe ich nicht. Bei "collectstatic" werden alle meine CSS Dateien "eingesammelt" und in "staticfiles" gespeichert:

und in uberspace habe ich
[rt@caelum rechentrainer]$ uberspace web backend set --apache /staticfiles
ausgeführt. ... Ist es das?
Keine Ahnung, ich habe keinen Webspace bei Ubersapce.
Aber /staticfiles sieht falsch aus. Der führende Slash deutet an, dass es sich um einen absoluten Pfad handelt.
/staticfiles ist also _nicht identisch_ mit /home/rechentrainer/staticfiles

Grundsätzlich musst du dem Apache ja irgendwo mitgeteilt haben, dass alles, was im URL path /static liegt direkt aus einem Verzeichnis gelesen werden soll (nämlich aus /home/rechentrainer/staticfiles.

Willst du das umgehen, greif zu whitenoise.
In eins von beiden musst du dich sowieso einlesen.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

"uberspace web backend set --apache /rt/rechentrainer/staticfiles" habe ich auch probiert - hilft nix.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ein Blick in die Anleitung bei Uberspace bringt folgendes:
https://lab.uberspace.de/guide_django/ hat geschrieben: [...]
3. Add a web backend, to tell Apache to serve the path set in STATIC_URL (if you kept the default this should be /static/).
Note: For this to work, you need to keep STATIC_ROOT and STATIC_URL “aligned” (i.e. your web root plus the path from STATIC_URL matches STATIC_ROOT). As in this example.
[...]
Grundsätzlich müsstest du also den Wert von STATIC_URL dort angeben. Das ist nicht /staticfiles sondern /static
Aber das, was in der Note steht ist bei dir nicht gegeben. web_root + STATIC_URL (also webroot/static) ist nicht gleich STATIC_ROOT /staticfiles.

Womit wir wieder bei meiner vorherigen Aussage waren:
Also entweder musst du den Apache so konfigurieren, dass er den URL-Pfad /static/ aus dem Verzeichnis /home/rechentrainer/staticfiles anbietet, oder dein Projekt entsprechend umbauen, dass collectstatic die Dateien nach /home/rechentrainer/static kopiert und deine CSS-Dateien, die da momentan liegen, in einer der Apps sind, statt in einem static-Verzeichis im Projekt.
Oder du musst STATIC_URL im Projekt auf /staticfiles umbiegen und hoffen, dass du nirgends hart /static im Code verwendet hast.

Oder du nutzt halt whitenoise.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

OK, morgen geht es weiter - danke soweit.
" if you kept the default this should be /static/" das hatte ich schon gelesen - das beinhaltet aber doch auch, dass, wenn das Verzeichnis, wie bei mir, nicht "static" heißt, weill es schon anderweitig belegt ist, umbenannt werden kann ... oder halt anscheinend auch nicht.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

STATIC_URL ist kein Verzeichnis.
Deshalb heißt das auch URL.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

Was ich halt gar nicht verstehe: Das ganze hat ja schon mal funktioniert. Ich habe jetzt nur mein Projekt upgedatet und neu hochgeladen, jetzt geht es nicht mir - also das CSS. Und ich bin ziemlich sicher, dass ich bei der vorigen Version auch DEBUG = False gesetzt hatte und in den Static Ordenern nicht geändert habe.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Wenn es vorher bei Uberspace lief, muss sich etwas geändert haben.
Pitwheazle
User
Beiträge: 869
Registriert: Sonntag 19. September 2021, 09:40

ja, irgendwie schon??

Allerdings bin ich halt doch sehr Newbe. ich hatte es ja auch geschafft, mein Projekt auf pythonanywhere zum laufen zu bringen und schaffe es jetzt mit der neuen Version nicht mehr. Die Fehlerliste ist riesig und ich habe viel Mühe reingesteckt. Zuerst habe ich die Dateien dort einzeln ersetzt, dann alles von Github hochgeladen und es zuletzt auch noch mit einer zip_Datei probiert - geht nicht!
Antworten