2012-05-04 2 views
20

Ich habe versucht, zu Python 2.7 von Python 2.5 zu verschieben, aber ich bekomme immer den gleichen Fehler.Fehler Python 2.7 bei Google App Engine - ThreadSafe kann nicht mit CGI-Handler aktiviert werden

Ich habe einen sehr einfachen Test in Python 2.5 mit der app.yaml Datei und nur ein Skript main.py und es funktioniert gut gemacht. Das Skript es nur ein Hello World-Typ zu überprüfen, alles funktioniert gut.

app.yaml

application: sparepartsfinder 
version: 1 
runtime: python 
api_version: 1 


handlers: 

- url: /blog 
    script: main.py 

- url: /blog/new_entry 
    script: main.py 

main.py

from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 

class MainPage(webapp.RequestHandler): 
    def get(self): 
     self.response.headers['Content-Type'] = 'text/plain' 
     self.response.out.write('Hello, webapp World!') 

application = webapp.WSGIApplication(
            [('/', MainPage), 
             ('/blog', MainPage), 
             ('/blog/new_entry',MainPage), 
             ('/blog/archive/.*',MainPage)], 
            debug=True) 

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

Wenn ich zu Python 2.7 ändern verfolge ich die Dokumente auf dem Google App Engine auf das Schreiben macht die Änderungen sowohl in der app.yaml und main.py-Skript

app.yaml

application: sparepartsfinder 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: true 


handlers: 

- url: /blog 
    script: main.py 

- url: /blog/new_entry 
    script: main.py 

- url: /blog/archive/.* 
    script: main.py 


- url: .* 
    script: main.py 

main.py

import webapp2 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     self.response.out.write('Hello prueba!') 

app = webapp2.WSGIApplication([('/', MainPage), 
           ('/blog', MainPage), 
           ('/blog/new_entry',MainPage), 
           ('/blog/archive/.*',MainPage)], 
           debug=True) 

Leider ist es auch nicht in lokalen oder wenn ich versuche, arbeiten, um die neue Konfiguration in dem Google App Engine zu laden. (Ich bekomme immer den gleichen Fehler).

Ich verstehe das Problem in meinem Computer (ich habe sowohl Python 2.5 und 2.7) auf einem Windows XP, aber nicht, wenn ich hochlade.

Dies ist der Fehler:

2012-05-04 13:02:07 Running command: "[u'C:\Python25\python2.5.exe', '-u', 'C:\Archivos >de programa\Google\google_appengine\appcfg.py', '--no_cookies', u'[email protected]', '--passin', 'update', 'C:\Documents and Settings\SSanjuan\Mis documentos\Dropbox\Dropbox\Python\SpareParts']" Error parsing yaml file: Invalid object: threadsafe cannot be enabled with CGI handler: main.py in "C:\Documents and Settings\SSanjuan\Mis documentos\Dropbox\Dropbox\Python\SpareParts\app.yaml", line 27, column 1 2012-05-04 13:02:31 (Process exited with code 1)

Antwort

30

Verwenden main.application statt main.py in Ihrem app.yaml. Sie benötigen Erstere, um threadsafe auf true zu setzen.

+0

Aber wo ist die Datei main.application? Wenn ich es ändere, erscheint ein neuer Fehler. : Konnte das Modul main.app nicht finden args = (' Modul main.app 'konnte nicht gefunden werden,) message =' Das Modul main.app ' – user1374783

+1

konnte nicht gefunden werden main.application (oder 'main.app') soll direkt auf ein WSGIApplication-Objekt mit Punktnotation verweisen. Wo findet Ihr main.py statt? Wenn es sich im obersten Verzeichnis des Projekts befindet, können Sie entweder 'main.app' oder' main.application' entsprechend dem Namen Ihres WSGIApplication-Objekts im globalen Bereich dieser Datei verwenden. –

+2

Siehe auch: https://developers.google.com/appengine/docs/python/python27/using27#Configuring_WSGI_Script_Handlers –

17

Ich habe das gleiche Problem, und hier ist die Antwort.

Für die Python 2.5-Laufzeit geben Sie einen Pfad zu einer Datei an - z. B. script: myfolder/myfile.py.

Für die Laufzeit von Python 2.7 geben Sie ein Objekt an. Wenn Sie also myfile.py mit einem passenden WSGI-Objekt "app" vergleichen, wird es als Skript angegeben: myfolder.myfile.app.

+3

genau - Ersetzen Sie '/' durch '.' in Ihrem Pfad und alles ist gut! – HorseloverFat

+1

Nachdem ich die '/' durch '.' ersetzt habe, habe ich einen' ImportError: Kein Modul namens myfolder'. Lösung: 'Note myfolder .__ init __. Py' – sjakobi

+1

Wow! Es war nur ein verdammtes "." Danke, dass du mir einige Stunden gerettet hast. – Tuelho