2012-05-04 42 views
20

我試圖從Python 2.5遷移到Python 2.7,但每次都收到相同的錯誤。Google App Engine上的Python 2.7錯誤 - 無法使用CGI處理程序啓用Threadsafe

我在Python 2.5中使用app.yaml文件和一個腳本main.py進行了非常簡單的測試,它工作正常。它只是一個Hello World類型來檢查everythin的腳本工作正常。

的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() 

當我改變到Python 2.7我按照在Google App Engine的文件,以信進行更改同時在app.yaml中和main.py腳本。

的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) 

遺憾的是它不無論是在本地或當我嘗試新的配置上傳到谷歌應用程序引擎的工作。 (我總是犯同樣的錯誤)。

我可以在Windows XP上理解我的機器上的問題(我有Python 2.5和2.7),但是我沒有上傳。

這是錯誤:

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)

回答

30

使用main.application,而不是在你的app.yaml main.py。您需要前者才能將threadsafe設置爲true

+0

但是文件main.application在哪裏?如果我改變它出現新的錯誤。 :找不到模塊main.app args =('Could not find module main.app',) message ='Could not find module main.app' – user1374783

+1

在前面的表格中, main.application'(或'main.app')應該直接用點符號指向WSGIApplication對象。你的main.py在哪裏發生BTW?如果它位於項目頂層目錄下,則可以根據該文件全局範圍內的WSGIApplication對象的名稱使用'main.app'或'main.application'中的任意一個。 –

+2

另請參閱:https://developers.google.com/appengine/docs/python/python27/using27#Configuring_WSGI_Script_Handlers –

17

我一直有同樣的問題,這裏的答案。

對於Python 2.5運行時,您指定了文件的路徑 - 即腳本:myfolder/myfile.py。

對於Python 2.7運行時,您正在指定一個對象。因此,assulation myfile.py包含一個合適的WSGI對象'app',它被指定爲script:myfolder.myfile.app。

+3

準確無誤 - 在路徑中用'.'替換'/',一切都很好! – HorseloverFat

+1

通過'.'替換了'/',我得到了一個'ImportError:No module named myfolder'。解決方案:'touch myfolder .__ init __。py' – sjakobi

+1

哇!這只是一個該死的'。' 謝謝你爲我節省了幾個小時。 – Tuelho

相關問題