2013-02-25 7 views
10

Wie erhalten Sie aws elastische Bohnenstangen, um Ihre statischen Werte in Ihrer Flaschen-App zu erkennen? Ich habe die Standard /.ebextensions/python.config paar YAML Linien a la:Statische Werte zeigen sich nicht für Flaschen auf elastischen Bohnenstangen

option_settings: 
    "aws:elasticbeanstalk:container:python:staticfiles": 
    "/static/": "static/" 

Alle meine Anrufe auf Vermögenswerte in Vorlagen eingewickelt werden in „{{url_for ('statisch', filename =" img/office.jpg ')}} "Dinge eingeben.

Aber keine Bilder, Stile oder Javascript zeigt beim Laden der Seite. Hier ist eine Beispiel-Protokolldatei 404. IP - - [25/Feb/2013: 21: 48: 13 +0000] "GET /static/css/bootstrap.css HTTP/1.1" 404 328 "http://xyz.elasticbeanstalk.com/"

Fehle ich etwas Offensichtliches? Alles läuft sehr gut auf meinen lokalen, nur statischen Vermögenswerte Last nicht einmal i aws.push

+0

Ich habe das gleiche Problem m, außer mit Flasche. Ich habe eine Reihe von Unterordnern in/static, also in der Flasche habe ich eine Route mit der Bezeichnung '@route ('/ static /: path #. + #')' Und es funktioniert gut, aber ich kann es nicht in Bohnenstange arbeiten . Hoffentlich hat jemand eine Antwort für uns! –

Antwort

6

git Ich bin nicht sicher, wo Sie Ihre statischen Dateien setzen, aber da mein typischerweise in app/static sind, ich habe:

[aws:elasticbeanstalk:container:python:staticfiles] 
/static/=app/static/ 
/favicon.ico=app/static/favicon.ico 

[aws:elasticbeanstalk:container:python] 
StaticFiles=/static/=app/static/,/favicon.ico=app/static/favicon.ico 

Beide Abschnitte scheinen wichtig zu sein. (Der letzte Abschnitt enthält auch andere Dinge, aber ich habe das weggelassen.) Ich habe hier zwei Ressourcenpfade, sowohl das Verzeichnis /static/ als auch das oberste Verzeichnis /favicon.ico, das von dummen alten Browsern immer verlangt wird.

+2

'/ statisch/= app/statisch /' tat es für mich. Genie, dass ich war ich hatte '/ statisch/= statisch /' direkt aus den Tutorials. Danke für das Beenden einer langen Suche :) – Felix

+1

@nisemand: Ist das noch eine gültige Lösung? Ich kann es nicht zur Arbeit bringen. Ich gehe davon aus, dass ich zur AWS-Verwaltungsseite für die Umgebung gehe, das Fenster "Software-Konfiguration" auswähle und das Verzeichnis für den virtuellen Pfad "/ static /" von "statisch /" nach "xyz" ändere/static/', wobei' xyz' der Ordner in meinem Projekt ist, der das Paket meiner Web-App enthält (entsprechend 'app', hier). Ist das richtig (weil es nicht funktioniert)? – orome

+0

Für das Leben von mir kann ich das nicht funktionieren. Ich betreibe eine Pyramid-Anwendung auf EB. Hat jemand einen Rat? Hier ist ein Link zu meiner Frage: https: // stackoverflow.com/questions/47046273/static-files-for-pyramid-application-on-elastic-bohnenstange –

3

Zum Zeitpunkt des Schreibens, nach vielen Stunden verbringen mit AWS EB config kämpfen, habe ich versucht, bis zu den statischen Dateien funktioniert, wie wir alle erwarten und meine Flask App Schöpfung aktualisiert:

app = Flask(__name__, static_url_path='/s') 

Diese rendert URLs wie /s/scripts/my-script.js und da ich immer url_for('static', ...) in meinem Code und Templates verwende, funktioniert alles auch außerhalb von AWS.

Update am 30.09.2013: Ich kann so ziemlich garantieren, dass die staticFiles Einstellungen in AWS EB Python-Container vollständig ignoriert werden.

Die Änderung, die ich oben vorgeschlagen habe, hat den unerwünschten Nachteil, alle statischen Dateianforderungen über Flask zu leiten (vielleicht, genauer gesagt, WSGI). Das ist jedoch nicht sehr schwer zu beheben.

Eine Apache CONIG Datei in Ihrem Projektstamm, mit dem Namen app-httpd.conf:

Alias /s /opt/python/current/app/static 
<Directory /opt/python/current/app/static> 
Order allow,deny 
Allow from all 
</Directory> 

Diese Konfiguration Apache sagt mit /s, demselben Präfix beginnen, alle Anfragen für URLs zu übernehmen wir für wählten unsere statischen Dateien und dienen Dateien aus unserer App statische Ordner.

Erstellen Sie diese Datei an .ebextensions/custom-apache.config:

container_commands: 
    add_apache_conf: 
    command: "cp app-httpd.conf /etc/httpd/conf.d" 

Diese Datei wird während der App-Bereitstellung verwendet werden und wird die neue .config-Datei in ein Verzeichnis kopieren, aus dem Apache ist Konfigurieren Sie, um alle angezeigten .config-Dateien zu laden.

+0

[Was ist die Beziehung zwischen '.extenxtensions/*. config' Dateien und' .elasticbeanstalk/optionsettings. * 'Dateien] (http : //stackoverflow.com/q/27907203/656912)? – orome

+0

Das **. Elasticbeanstalk ** Verzeichnis, so weit ich weiß, behält die lokalen Einstellungen für Ihr Projekt bei. Diese Einstellungen werden von den 'eb' Kommandozeilen-Tools verwendet, auch wenn Sie' git aws.push' ausführen. Ich habe persönlich aufgehört diese Tools zu benutzen und habe meine eigenen Skripte mit ihrer API geschrieben. In meinem Fall verwende ich für Python das Boto-Paket. Die Inhalte in ** .exextensions ** sind in Ihrer App enthalten, wenn sie bereitgestellt oder aktualisiert wird. Es enthält Einstellungen oder Befehle, die bei der Bereitstellung in Ihren App-Servern ausgeführt werden. – sergiopereira

0

Ich hatte ein ähnliches Problem, wo seltsamerweise alle Dateien von static/img/ bedient wurden, aber alles in oder static/js/ wurde einfach nicht bedient.

Um dies zu beheben, öffnete ich .elasticbeanstalk/optionsettings.app-env aus dem Stammverzeichnis der Quelle Flask und bearbeiten diesen Codeblock

[aws:elasticbeanstalk:container:python] 
NumProcesses=1 
NumThreads=15 
StaticFiles=/static/.*= 
WSGIPath=application.py 

[aws:elasticbeanstalk:container:python:staticfiles] 

Hinweis zu sein, dass StaticFiles nimmt tatsächlich einen regulären Ausdruck, so in /static/.* die .* für jede erlaubt Pfad nach /static/

+0

[Was ist die Beziehung zwischen '.extenxtensions/*. Config' Dateien und' .elasticbeanstalk/optionsettings. * 'Dateien] (http://stackoverflow.com/q/27907203/656912)? – orome

0

Eine seltsame Sache, die ich gefunden habe, um dieses Problem zu lösen, war meine .gitignore-Datei zu bearbeiten. Es beinhaltete das Entfernen der/dist-Ordner, und das beinhaltete die dist-Ordner, in die mein CSS generiert wurde. So fehlten die CSS-Dateien tatsächlich, wenn ich sie einsetzte.

Hoffen, dass dies jedem helfen kann, der im selben Boot sein könnte.

0

4+ Jahre später, ich bin in der Lage statische Dateien mit Arbeiten zu bekommen:

(file: .ebextensions/WHATEVER_NAME.config)

option_settings: 
    - namespace: aws:elasticbeanstalk:container:python 
    option_name: StaticFiles 
    value: /static/=PATH/FROM/MY/APP/BASE/DIR/TO/STATIC/DIR/ 

... in meinem Fall die

value: /static/=distrib/static/ 
war

Ich fand, dass meine

app = Flask(__name__) 
ändern

zu

app = Flask(__name__, static_url_path='/static') 

war weder notwendig noch ausreichend. Wenn ich nur static_url_path, aber nicht StaticFiles gesetzt habe, hat es nicht funktioniert. Wenn ich StaticFiles aber nicht static_url_path einsetze, hat es funktioniert.

< sarkasmus> Elastische Bohnenstange ist super einfach und gut dokumentiert! </Sarkasmus>

0

Es kann auch durch Elastic Beanstalk-Panel erfolgen:

Konfiguration -> Software-Konfiguration -> Statische Dateien

und dann

enter image description here

wie eine alternative Option

Verwandte Themen