Сервер разработки Python App Engine + Taskqueue + Backend

м с использованием 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

я используюлокальный» и может'не вижу причин, почему это не удается. Некоторые идеи / решения? Отсутствует какой-либо параметр запуска или что-то подобное?

Спасибо

 Jimmy Kane20 дек. 2012 г., 16:57
Та же проблема здесь.
 bossylobster07 нояб. 2012 г., 16:43
Вы можете отредактировать свойtaskqueue.add заявление?
 user180656108 нояб. 2012 г., 11:57
Конечно, я мог выполнить заявление без каких-либоцель», Это'работает без ошибок. Но моя цель - выполнение на бэкэнд-сервере :-)

Ответы на вопрос(2)

taskqueue.py, он пропускает случай, чтобы различать производство и среду разработки.

В производстве он делает правильную вещь, объединяяtarget с.hostname

В развитии это неt сработает и выдаст ошибку, о которой вы сообщили при попытке устраненияworker.localhost адрес.

Вместо этого он должен установить задачу хоста наip:port dev_appserver запускает серверную часть.

Уже естьошибка в трекере общественного выпуска, который был переведен в команду инженеров.

Не стесняйтесь отмечать это, если вы хотите получать уведомления об обновлениях.

 proppy03 янв. 2013 г., 01:53
Вы должны звездыcode.google.com/p/googleappengine/issues/detail?id=5105 быть уведомленным об обновлении относительно этой проблемы.
 Jimmy Kane20 дек. 2012 г., 16:57
Так что-нибудь исправить? Или мы можемразвить больше на сервере dev?
 Vladimir Obrizan10 мар. 2013 г., 07:48
@JimmyKane, пожалуйста, посмотрите ниже небольшой обходной путь, который помогает мне локально отлаживать бэкэнд-сервисы.

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

В этом случае, если мы отлаживаем локально, мы запускаем задачу в обычной очереди задач. Если мы поместим этот код в App Engine, он запустит задачу с помощью внутреннего сервера.

 Vladimir Obrizan25 мар. 2013 г., 16:50
@ Андрей, нет, я неНе указывайте номера портов.
 Andrew26 мар. 2013 г., 05:32
В этом случае я неЯ не совсем понимаю решение. В приведенном выше примере задача по-прежнему будет направлена на порт 80 (в отличие от 8080). Я думал, что вы указали порт через target = 'локальный: 8080', но ты'не принимаю такой подход ... я думаю, я нене понимаю, какtaskqueue.add (URL =»/ Задачи», params = {...}) " решает эту проблему.
 Vladimir Obrizan26 мар. 2013 г., 09:23
@ Андрей, это не решение проблемы. Это обходной путь. Основная идея в этом коде, что мы нене использовать бэкэнд вообще. Мы используем обычную очередь задач.
 Andrew25 мар. 2013 г., 14:17
Вы указываете номер ПОРТА с помощью этого оператора if?

Ваш ответ на вопрос