Внезапно запрос приложения appengine devmode к 0.0.0.0 отклонился - PullRequest
2 голосов
/ 02 ноября 2011

Обновление : Когда я отключаю GWT для моего проекта, эта проблема исчезает!

Я с радостью использую очереди задач в appengine уже несколько месяцев, и тестирование в режиме разработки прошло отлично на моей машине с Mac OS X.

Сегодня все рухнуло.

[ERROR] Job CleanupQueue.task1 threw an unhandled Exception: 
com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused
    at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:381)
    at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:480)
    at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
[ERROR] Job (CleanupQueue.task1 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused]
    at org.quartz.core.JobRunShell.run(JobRunShell.java:214)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
com.google.apphosting.api.ApiProxy$ApplicationException: ApplicationError: 2: Received exception executing http method POST against URL http://0.0.0.0:8888/tasks/cleanup: Connection to http://0.0.0.0:8888 refused
    at com.google.appengine.api.urlfetch.dev.LocalURLFetchService.fetch(LocalURLFetchService.java:381)
    at com.google.appengine.api.taskqueue.dev.LocalTaskQueue$UrlFetchServiceLocalTaskQueueCallback.execute(LocalTaskQueue.java:480)
    at com.google.appengine.api.taskqueue.dev.UrlFetchJob.execute(UrlFetchJob.java:77)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)

Я ничего не изменил в своем проекте, и возврат к ранее работающей версии не помогает. 0.0.0.0 - это ip, исходящий из сервера dev - все мои другие ссылки используют localhost или 127.0.0.1. Я недавно установил некоторые обновления ОС от Apple, но я бы поклялся, что режим разработки работал между тем и сейчас.

Где я могу начать искать причину? Спасибо за любые идеи - я в тупике!

Примечание: тот же код и настройки на моих машинах с Windows прекрасно работают.

Примечание 2: начиная с нуля с GAE java sdk 1.5.5, я создал простейший пример приложения Taskqueue и получил сообщения об отказе в том же соединении.

Дополнительная информация

Ifconfig:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 127.0.0.1 netmask 0xff000000 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether c8:2a:14:0d:d8:e8 
    inet 192.168.2.1 netmask 0xffffff00 broadcast 192.168.2.255
    media: autoselect (none)
    status: inactive
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
    lladdr 70:cd:60:ff:fe:6a:28:ae 
    media: autoselect <full-duplex>
    status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 78:ca:39:b4:c3:8a 
    inet6 fe80::7aca:39ff:feb4:c38a%en1 prefixlen 64 scopeid 0x6 
    inet 192.168.2.3 netmask 0xffffff00 broadcast 192.168.2.255
    media: autoselect
    status: active

Ответы [ 4 ]

3 голосов
/ 08 ноября 2011

Я не видел этой проблемы (работает Python SDK, а задачи работают локально в наших средах MacOS X), но вы пробовали переключение для прослушивания всех IP-адресов?

Передача --адрес0.0.0.0 в дополнительных флагах в лаунчере должен связываться со всеми и позволять вам использовать localhost или ваш фактический IP.Конечно, это не должно быть обязательным, но это то, что вы можете попробовать в качестве эксперимента.

Передаете ли вы явную цель для задачи?Работает ли ваше приложение с портом не по умолчанию 8888?

Как выглядит вывод ifconfig?Существуют ли какие-либо виртуальные адаптеры или другие сетевые устройства, которые изменились за время, когда это стало бесполезным?

1 голос
/ 11 ноября 2011

0.0.0.0 - это особый вид адреса. В этом контексте это означает «все IP-адреса (IPv4) на локальной машине». Итак, если ваш appengine прослушивает порт 8888, это означает, что он привязан ко всем доступным IP-адресам. Поэтому из вашей конфигурации он должен быть доступен на локальном хосте ( 127.0.0.1: 8888 ), 192.168.2.1: 8888 и 192.168.2.3: 8888 . Вы можете убедиться, что пытаетесь что-то вроде:

telnet 192.168.2.1 8888

Итак, во-первых, вы не должны передавать это как IP-адрес.

Будет интересно проверить, есть ли у вас доступ к: http://localhost:8888/_ah/admin/ когда сервер работает.

Начиная с версии> = 2.0.1 приложения, стандартное поведение devmode заключается в том, что он будет привязываться только к localhost. Чтобы привязать или ко всем доступным IPv4-адресам (a.k.a. 0.0.0.0), вы (или если он автоматически просматривается программой с некоторой предопределенной конфигурацией, например Eclipse) должны указать -bindAddress 0.0.0.0 . Возможно, это будет полезно, если вы проверите конфигурацию Eclipse Run - Аргументы - Аргументы программы, если вы запустите ее из Eclipse, что приведет нас к следующему вопросу. Как запустить движок приложения? Есть два варианта и обратите внимание, что

"при запуске сервера разработки из Eclipse с использованием подключаемого модуля Google для Eclipse сервер использует порт 8888 по умолчанию . Когда вы запускаете сервер с помощью команды dev_appserver, он использует порт 8080 по умолчанию . "

Вы упомянули, что вы выполнили обновление своей ОС. Я обнаружил, что проблема связана с обновлением JDK, но обсуждается версия Java SE 6 Update 4 . Тем не менее, я думаю, что стоит упомянуть об этом здесь. Также следует предположить, что после обновления не было обновления брандмауэра , что сделало его автозапуском, верно?

Я бы также предложил проверить вашу конфигурацию в ant-macros.xml и посмотреть, какие значения есть:

<attribute name="port" default="8080" description="The port the server starts on"/>
<attribute name="address" default="localhost" description="The interface the server binds to"/>
1 голос
/ 02 ноября 2011

Вы не должны использовать 0.0.0.0 в качестве цели подключения. 0.0.0.0 имеет особое значение: оно относится ко всем IP-адресам (представьте, что это . . *. *). Это часто используется при привязке сокета прослушивания ко всем доступным интерфейсам.

Таким образом, даже если прослушивающий сокет привязан к 0.0.0.0, вы не должны использовать тот же ip для подключения к нему. Часто вы можете подключиться к IP-шлейфу 127.0.0.1 или к вашему активному общедоступному ip (проверьте ipconfig в win или ifconfig в linux).

Различные приложения и операционные системы могут по-разному обрабатывать 0.0.0.0 в качестве цели подключения. Это может объяснить, почему это работает в вашем Firefox.

0 голосов
/ 16 ноября 2011

Я обошёл проблему.

Класс, который запускает проект GWT & GAE из eclipse: com.google.appengine.tools.development.gwt.AppEngineLauncher. Этот класс жестко кодирует 0.0.0.0 в качестве IP-адреса для привязки, который согласно комментариям должен вызывать его прослушивание на всех интерфейсах.

Я просто скопировал код из этого класса в класс AppEngineLauncherHack, который жестко кодирует более конкретный IP-адрес (в моем случае 192.168.0.12), и изменил мою конфигурацию запуска, чтобы использовать вместо этого класс.

Я не понял, каков был окончательный конфликт. Я не знаю, почему 0.0.0.0 раньше работал, но больше не работает. Неудовлетворительно и, безусловно, является клугом - если это начнет происходить на других машинах, нам придется создать новый класс AELauncherHack для каждого компьютера! Но, по крайней мере, теперь мы можем вернуться к делу.

Спасибо за помощь всем - извините, я мог присудить награду только одному человеку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...