2017-08-21 7 views
1

Notre équipe a migré un projet de GAE vers AWS. Un composant est une application web basée sur webapp2, un framework facile à intégrer avec GAE. Nous avons également conservé le framework webapp2 dans AWS, avec quelques modifications mineures pour le faire fonctionner. L'application Web fonctionne très bien dans le cloud, mais j'essaie de trouver un moyen de l'exécuter sur les machines de développement locales. Lorsque nous utilisions l'environnement GAE, la tâche était simple, car Google fournit App Engine Launcher, un outil qui simule très bien l'environnement cloud.Python webapp2 servir le contenu statique

Dans AWS, nous avons continué à créer des hacks afin de démarrer l'application Web à l'aide d'App Engine Launcher, mais nous souhaitons maintenant la supprimer. Donc, j'ai modifié le script python et il démarre avec succès mais je ne sais pas comment servir le contenu statique. Les fichiers statiques (CSS, JS) sont ajoutés aux modèles HTML comme link rel = "stylesheet" type = "text/css" href = "{{statics_bucket}}/statiques/css/shared.css"/, où {{static_bucket}} est une variable d'environnement qui pointe vers un compartiment Amazon S3 spécifique par environnement. Bien sûr, cela ne fonctionne pas sur localhost car personne ne sert de contenu statique sur http://localhost:8080/statics/css/shared.css par exemple. Le lanceur Google App Engine avait cette fonctionnalité et il a fait tout le travail difficile.

Quelqu'un pourrait-il indiquer un moyen d'atteindre mon objectif?

Répondre

1

j'ai réussi à atteindre mon objectif avec le script suivant:

import os.path 
import application 

from paste import httpserver 
from paste.cascade import Cascade 
from paste.urlparser import StaticURLParser 

def main(): 
    web_client = application.application 
    here = os.path.dirname(os.path.abspath(__file__)) 
    static_app = StaticURLParser(here) 

    app = Cascade([web_client, static_app]) 
    httpserver.serve(app, host='localhost', port='8080') 

if __name__ == '__main__': 
    main() 

Le script démarre l'application cloud et également un composant qui sert les fichiers statiques, à la fois sur le même port à l'intérieur du même serveur.