7

ローカル開発サーバーで GAE Python 2.7 を使用しています。バックエンドを構成しました

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」を使用していますが、失敗する理由がわかりません。いくつかのアイデア/解決策はありますか? 起動パラメーターが欠落しているか、またはそのようなものはありますか?

ありがとう

4

2 に答える 2

8

これは のバグtaskqueue.pyです。本番環境と開発環境を区別するケースがありません。

本番環境では、 と を連結することで正しいことtargetを行いhostnameます。

開発中、それは機能せず、アドレスを解決しようとしたときに報告されたエラーが発生しますworker.localhost

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

エンジニアリング チームにエスカレートされたパブリック イシュー トラッカーには既にバグがあります。

更新に関する通知を受け取りたい場合は、気軽にスターを付けてください。

于 2012-11-14T23:59:05.217 に答える
1

ローカルでデバッグするのに役立つ回避策が1つあります。

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

この場合、ローカルでデバッグすると、通常のタスクキューでタスクが実行されます。このコードをAppEngineに配置すると、バックエンドサーバーを使用してタスクが開始されます。

于 2013-03-10T06:46:12.787 に答える