2017-12-30 61 views
0

Also für ein Projekt, ich bin erforderlich, um Code in 3 übergeordneten Ordnern - SourceA, SourceB und SourceC, je nachdem, ob der Code ist mein eigenes, teilweise mein eigenes oder jemand anderes ist entsprechend. Diese 3 Ordner haben dann auch einen Python, Javascript und misc (enthält HTML & alles andere) in ihnen. Zum Beispiel kann die Struktur gesehen werden graphisch wie folgt:Google App Engine: Wie haben Sie statische & dyamische Dateien mit demselben übergeordneten Verzeichnis? z.B. dir/css & dir/python?

--SourceA

---- Python

---- JavaScript

---- misc

--SourceB

---- python

---- Javascript

---- misc

--SourceC

---- Python

---- Javascript

---- misc

Ebenso meine app.yaml Datei kann unten gesehen werden. Wenn dies lokal ausgeführt wird, funktioniert dies einwandfrei und zeigt sowohl die statischen als auch die dynamischen Dateien entsprechend an. Bei der Bereitstellung in Google App Engine wird jedoch nur der Fehler TemplateNotFound ausgelöst, möglicherweise weil die App Engine das übergeordnete Verzeichnis (z. B. SourceA) als statischen Pfad behandelt :

runtime: python27 
api_version: 1 
threadsafe: true 
handlers: 
- url: /SourceA/misc 
    static_dir: SourceA/misc 
- url: /SourceB/misc 
    static_dir: SourceB/misc 
- url: /SourceC/misc 
    static_dir: SourceC/misc 
- url: /SourceA/javascript 
    static_dir: SourceA/javascript 
- url: /SourceB/javascript 
    static_dir: SourceB/javascript 
- url: /SourceC/javascript 
    static_dir: SourceC/javascript 
- url: /.* 
    script: SourceA.python.main.app 

Wenn ich diese laufen lasse, erhalte ich eine von beiden der render_template() Funktion in Flask (das Jinja hinter den Kulissen verwendet) geworfen TemplateNotFound Fehler und wenn ich mit der .render() Funktion in Jinja versuche stattdessen . Wenn ich stattdessen alle statischen Handler entferne, nur um das Prinzip zu testen, der Python-Code, der wieder wie erwartet funktioniert ... aber natürlich werden die statischen Dateien nicht bedient ... d. durch die Änderung meiner app.yaml zu

runtime: python27 
api_version: 1 
threadsafe: true 
handlers: 
- url: /.* 
    script: SourceA.python.main.app 

Während ich dieses Problem umgehen kann und verfügen über eine volle Baustelle auf AppSpot einfach durch ein statisches Verzeichnis außerhalb der SourceA/B/C-Verzeichnisse zu machen, ist dies nicht ideal, wie es nicht die Spezifikation folgt, die ich folgen sollte

Wie auch immer, hoffentlich habe ich das Problem erklärt und wenn jemand weiß, ob dies möglich ist, dann wäre ich dankbar für jede Hilfe!

Dank

+0

Off-Topic, aber seltsam scheint es, dass statische Dateien geladen werden, ohne einen statischen Handler in der App anzugeben.yaml on bei der Bereitstellung auf app engine ... aber sie werden nicht geladen, wenn die statischen hanlders nicht spezifisch sind, wenn sie lokal ausgeführt werden ... – Josh

+0

Ich glaube nicht, dass ein 'template not found' Fehler etwas mit Ihrem zu tun hat URL-Zuordnung Wo ist dein 'Templates'-Verzeichnis? – GAEfan

Antwort

0

Wenn Ihre App-Funktionen richtig auf dem Entwicklungsserver bedeutet es, dass das Problem einfach die in einer Verzeichnisdatei Anwesenheit erklärte statisch, die standardmäßig nicht app-zugänglich ist. Das Hinzufügen des Flags application_readable zur Handlerkonfiguration für die statischen Verzeichnisse würde das Problem beheben, siehe entsprechende Zeile in der Tabelle handlers.

Aber im Allgemeinen ist es keine gute Idee, App-Code mit statischen Elementen zu mischen.

Verwandte Themen