2012-05-04 9 views
20

Python 2.5からPython 2.7に移行しようとしましたが、毎回同じエラーが発生しています。エラーGoogle App EngineのPython 2.7 - CGIハンドラでThreadsafeを有効にできません

私はapp.yamlをファイルし、ちょうど1つのスクリプトmain.pyでの作業はPython 2.5で非常に簡単なテストをしたし、それが正常に動作します。スクリプトそれはちょうど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に変更すると、私は両方のapp.yamlに変更を加える文字にGoogle App Engine上の文書に従い、 main.pyスクリプト。

app.yamlを

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) 

は、残念ながら、それがローカルにまたは私はGoogle App Engineの新しいコンフィギュレーションをアップロードしようとすると、いずれかの動作しません

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。 (私はいつも同じミスをする)。

私がアップロードしたときに、私は、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.pythreadsafetrueに設定するには、前者が必要です。

+0

ファイルmain.applicationはどこにありますか?変更した場合、新しいエラーが表示されます。 <タイプ「exceptions.ImportError」>:モジュールmain.app 引数=見つかりませんでした(「モジュールmain.appが見つかりませんでした」) メッセージは= '、前者の形態では – user1374783

+1

「モジュールmain.appが見つかりませんでした」 main.application'(または 'main.app')はWSGIApplicationオブジェクトをドット表記で直接指すことになっています。あなたのmain.pyはどこで行われていますか?プロジェクトのトップディレクトリの下にある場合は、そのファイルのグローバルスコープ内のWSGIApplicationオブジェクトの名前に従って、 'main.app'または' main.application'のいずれかを使用できます。 –

+2

も参照してください:https://developers.google.com/appengine/docs/python/python27/using27#Configuring_WSGI_Script_Handlers –

17

私は同じ問題を抱えていました。ここに答えがあります。

Python 2.5ランタイムでは、ファイルへのパスを指定しています。つまり、script:myfolder/myfile.pyです。

Python 2.7ランタイムでは、オブジェクトを指定しています。だから、myfile.pyには適切なWSGIオブジェクト 'app'が含まれていると仮定すると、スクリプト:myfolder.myfile.appとして指定されています。

+3

あなたのパスの '/'で '/'を置き換えてください。 – HorseloverFat

+1

'/'を '.'で置き換えると、私は' ImportError:No module myfolder'というモジュールを持っています。解決策: 'touch myfolder .__ init __。py' – sjakobi

+1

うわー!それはちょうど駄目だった。 時間を節約してくれてありがとう。 – Tuelho