2014-06-22 7 views
5

Próbowałem utworzyć projekt Google App Engine zawierający różne moduły, z których każdy ma różne wersje; ale nie mogę go uruchomić.Jak poprawnie zaimplementować wiele wersji wielu modułów w Google App Engine?

Przeszedłem wszystko na google modules guide website, ale ich opis hierarchii aplikacji jest bardzo niejasny. Pobrałem prostą aplikację testową, aby sprawdzić, jak działa (czego nie mogę uruchomić).

Jest to struktura aplikacji teraz: http://www.iteratorium.eu/stackoverflow/structure.jpg

i cała sprawa jest spakowany tutaj: http://www.iteratorium.eu/stackoverflow/flask_app.zip

Istnieją trzy moduły: default, my-moduł i ruchomej interfejsu internetowego, a zarówno mój moduł, jak i mobilny frontend mają dwie wersje w katalogach v_one i v_two. Każda wersja ma własny plik .yaml, który zawiera pojedynczy moduł obsługi (co ułatwia jego testowanie).

Czy struktura jest co najmniej poprawna? Kiedy ładuję aplikację za pomocą pliku dev_appserver.py, wszystko jest w porządku, o ile nie ładuję dwóch wersji tego samego modułu. W tym przypadku tak się dzieje:

[email protected]_COMPUTER:~/flask_app$ python ~/google_appengine/dev_appserver.py dispatch.yaml app.yaml mobile-frontend/v_one/mobile-frontend.yaml my-module/v_one/my-module.yaml my-module/v_two/my-module.yaml 

wyników w traceback oraz następujące:

google.appengine.tools.devappserver2.errors.InvalidAppConfigError: Duplicate module: my-module 

(Obie wersje uzyskać przesłanych na AppEngine poprzez appcfg.py bez żadnych błędów, to może być tylko localhost serwer nie może obsłużyć wielu wersji)

Jeśli ładuję tylko jedną wersję każdego modułu, wszystko działa, ale moduły nie mogą importować niczego z katalogu lib. Dostęp http://localhost:8082/mobiler poprzez wynikach przeglądarek w tym w terminalu:

from flask import Flask 
ImportError: No module named flask 

zdefiniowałem ścieżkę do folderu lib w pliku appengine_config.py ale nie wydają się działać dla modułów. Tam właśnie zatrzymałem się i zdecydowałem, że tu przyjadę, ponieważ nie jestem nawet pewien, czy struktura jest prawidłowa, i mogę być daleko od tego wszystkiego.

Więc ... Jak daleko jestem?

+0

Jak już powiedziałeś, problem polega na tym, że lokalny serwer dev nie może obsłużyć wersji tego samego modułu w tym samym czasie. Mówiąc to, wygląda na to, że moduły NIE są uruchomione appengine_config.py, więc nie ładują się w ogóle Flask – marianosimone

Odpowiedz

0

Być może robisz zbyt dużo w appengine_config.py, spróbuj zmniejszyć go do:

import sys 

sys.path.insert(0, 'lib') 
1

nocie: Serwer dev nie pozwoli Ci załadować różne wersje tego samego modułu

Potrzebujesz definicji modułów, aby znaleźć się w katalogu głównym pliku appengine_config.py, aby załadować.

Zważywszy naprawdę naprawdę chcesz zachować kod dla dwóch wersjach rozdzielonych, lepsza aplikacja organizacja będzie w następujący sposób (tylko pokazano Mobile frontend do utrzymania go krótki):

root 
    |__ mobile-frontend 
    | |__ v_one 
    |  |__ __init__.py 
    |  |__ mobiler.py 
    | |__ v_two 
    |  |__ __init__.py 
    |  |__ mobiler.py 
    |__ appengine_config.py 
    |__ dispatch.yaml 
    |__ mobile_frontend_v_one.yaml 
    |__ mobile_frontend_v_two.yaml 

A mając mobile_frontend_v_one.yaml ma coś takiego:

handlers: 
    - url: .*/mobiler 
    script: mobile-frontend.v_one.mobiler.app 
+1

Mimo to wolałabym nie mieć różnych wersji odtwarzanych w tym samym kodzie i używałbym gita (jak się wydaje, że już go używasz), aby śledzić różne wersje – marianosimone