2012-11-07 11 views
7

GAE Python 2.7をローカル開発サーバーで使用しています。私はバックエンドを設定しましたApp Engine Python開発サーバー+ Taskqueue +バックエンド

backends: 
- name: worker 
    class: B1 
    options: dynamic 

私はデフォルトのタスクキューを使用しています。すべてがうまく動作し、バックエンドとタスクキューがSDKコンソールに表示されます。

Multiprocess Setup Complete: 
Remote API Server [http://localhost:9200] 
App Instance [http://localhost:9000] 
Backend Instance: worker.0 [http://localhost:9100] 
Backend Balancer: worker [http://localhost:9199] 

をしかし、私は仕事を経由してバックエンドに対処しようとした場合

taskqueue.add(url='/xyz', method='POST', target='worker', params={'a':'b'}) 

このエラーが発生します:また、ローカルの開発作業は、エラーなしで起動する私が使用している

ERROR An error occured while sending the task "task1" (Url: "/backend/languages/create_database/") in queue "default". Treating as a task error. 
Traceback (most recent call last): 
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/taskqueue/taskqueue_stub.py", line 1884, in ExecuteTask 
    connection.endheaders() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 937, in endheaders 
    self._send_output(message_body) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 797, in _send_output 
    self.send(msg) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 759, in send 
    self.connect() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 740, in connect 
    self.timeout, self.source_address) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 553, in create_connection 
    for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
gaierror: [Errno 8] nodename nor servname provided, or not known 

を'localhost'は失敗して何らかの理由で失敗することはありません。いくつかのアイデア/ソリューション?スタートアップパラメータが見つからない、または何かそんなもの?

おかげ

+0

あなたの 'taskqueue.add'ステートメントを編集できますか? – bossylobster

+0

もちろん、「ターゲット」なしで文を実行することもできますが、エラーなしで実行しています。しかし、私の目標はバックエンドサーバー上での実行です:-) – user1806561

+0

ここで同じ問題が発生します。 –

答えて

8

は、それが生産と開発環境を区別する場合を逃し、taskqueue.pyでバグです。

targethostnameを連結することで、プロダクションで正しいことが実行されます。

開発中、これはうまくいかず、worker.localhostアドレスを解決しようとしたときに報告したエラーが発生します。

代わりに、タスクホストをip:portに設定する必要があります。dev_appserverがバックエンドを実行しています。

公開号トラッカーには既にbugがエンジニアリングチームにエスカレーションされています。

更新の通知が必要な場合は、気軽にスターを付けてください。この場合

if os.environ['SERVER_SOFTWARE'].startswith('Development'): 
    taskqueue.add(url='/task', params={...}) 
else:  
    taskqueue.add(url='/task', params={...}, target='backendservername') 

我々は、通常のタスクキューにタスクを実行して、ローカルでデバッグする場合は、:

+0

それで、それはどんな修正ですか?あるいは、devサーバーでもう開発できませんか? –

+0

この問題に関する更新の通知を受けるには、http://code.google.com/p/googleappengine/issues/detail?id=5105にスターを付ける必要があります。 – proppy

+0

@JimmyKane、下記のバックエンドサービスをローカルでデバッグするのに役立つ小さな回避策をご覧ください。 –

1

ローカルでデバッグする私を助け1つの回避策があります。このコードをApp Engineに挿入すると、バックエンドサーバーを使用してタスクが開始されます。

+0

このif文を使用してPORT番号を指定していますか? – Andrew

+0

@Andrew、いいえ、私はポート番号を指定しません。 –

+0

その場合、私は完全に解決策を理解していません。上記の例では、タスクは(8080ではなく)ポート80に転送されます。私はあなたがtarget = 'localhost:8080'経由でポートを指定していましたが、このアプローチを取っていません...私は "taskqueue.add(url = '/ task'、params = ...}) "はこの問題を解決します。 – Andrew

関連する問題