2011-10-30 41 views
10

我正在將我的gae應用程序遷移到python 2.7。這是我的新的app.yaml:如何將我的app.yaml遷移到2.7?

application: webfaze 
version: main 
runtime: python27 
api_version: 1 
threadsafe: true 

handlers: 
- url: /mapreduce(/.*)? 
    script: mapreduce/main.application 

- url: /(.*\.(html|css|js|gif|jpg|png|ico|swf)) 
    static_files: static/\1 
    upload: static/.* 
    expiration: "1d" 

- url: .* 
    script: main.application 

- url: /task/.* 
    script: main.application 
    login: admin 

但我收到此錯誤信息:

Error parsing yaml file: 
Invalid object: 
threadsafe cannot be enabled with CGI handler: mapreduce/main.application 
    in "webfaze/app.yaml", line 22, column 1 

你能告訴我如何解決這個錯誤嗎?

回答

7

檢查source code,它看起來你需要定義你的處理程序的路徑沒有任何斜線:

if (handler.script and (handler.script.endswith('.py') or 
     '/' in handler.script)): 
     raise appinfo_errors.ThreadsafeWithCgiHandler(
        'threadsafe cannot be enabled with CGI handler: %s' % 
        handler.script) 

移動application.py到項目的根目錄,並相應修改處理程序的路徑。

+0

謝謝你是真的,我可以忽略mapreduce部分,因爲我目前沒有使用它。現在更新通過了語法檢查,我很好奇看到現在發生了什麼,我剛剛運行'set_default_version' –

+7

或將其命名爲'mapreduce.main.application'。 –

+0

謝謝@尼克約翰遜提供完整的解決方案。我可以很輕鬆地將整個應用程序遷移到python 2.7 :-) –

7

變化:

- url: /mapreduce(/.*)? 
    script: mapreduce/main.application 

要:

- url: /mapreduce(/.*)? 
    script: mapreduce.main.application 

您可能還需要一個__init__.py添加到 'MapReduce的' 文件夾,如果不存在已經有了。這將使python將該文件夾解釋爲模塊。

+0

我試過最新版本,它似乎從應用程序更改爲APP – wonglik

+0

@wonglik按'最新版本'哪個版本會是。我正在運行SDK的v.1.7.0,將「應用程序」更改爲「應用程序」會引發500(服務器)錯誤。 –

+0

對不起。我的意思是MapReduce Bundle的最新版本 - 1.6.2取自https://developers.google.com/appengine/downloads – wonglik