2012-01-19 2 views
0

У меня есть некоторые услуги Python и я определил местоположение обработчиков для них в app.yamlGAE: Python и Java службы вместе под одной App ID

У меня есть Java-сервисы и я настроил web.xml.

Я хочу, чтобы они оба находились под одинаковым идентификатором APP, например.

Так как я могу это сделать?

  • Когда я использую GAE Java Eclipse, плагин, он загружает только сервис Java и удаляет существующую службу Python.
  • Когда я использую appcfg.py update, он загружает только службу Python и удаляет существующую службу Java.

ответ

4

Существует хак: загрузить в различных версиях

Вы можете иметь одну версию экземпляра в Java, а другой в Python. По умолчанию он будет доступен для общественности через http://myapp.appspot.com.

Вы можете получить доступ к другой версии (в браузере или программно) с помощью http://version.myapp.appspot.com, например.http://3.myapp.appspot.com

Если вы хотите получить доступ к ним через один и тот же URL-адрес, вам потребуется прокси-запрос или перенаправление (если ваш клиент это разрешает).

+0

Этот обход подходит для моей установки. Благодарю. – ckain

0

Я уверен, что вы можете иметь только одно приложение одновременно, потому что это разные серверы приложений/виртуальные машины для каждого типа. Я имею в виду, что вы не можете загружать разные части, не можете иметь разные sdk для разных URL-адресов в одном приложении и т. Д.

Кстати, вы можете попробовать использовать jython, он может интерпретировать ваш код Pythong в Java-проекте. Я не уверен, что это готово к производству (было много проблем с ним, когда я это пробовал несколько лет назад), но, возможно, это полезно для вашей ситуации.

+0

Счастливая новость заключается в том, что Jython теперь указан как совместимый в списке совместимости GAE/J (http://code.google.com/p/googleappengine/wiki/WillItPlayInJava#Jython_%28Python%29), поэтому я думаю это было бы достойно. –

+0

На самом деле вы можете с помощью взлома: загрузить в разные версии. –

0

Как сказал @splix, развертывание двух приложений на разных языках в такое же приложение кажется невозможным. Итак, как насчет обходного пути? Установите сервлет/pythonapp на Java-приложение, которое перенаправит все запросы на mypythonapp.appspot.com через URLFetch.

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

EDIT: То, что я имел в виду, это то, что предложил Питер, используя разные версии, а не развертывать их как совершенно другое приложение, извините, что я их перепутал. Развертывание в другом приложении означает, что приложение Python и приложение Java не могут использовать общий хранилище данных.

Разница в моем ответе заключается в том, что вы можете использовать URLFetches для пересылки запросов между различными версиями вашего приложения. Но перенаправление, выполняемое на стороне клиента в соответствии с предложением Питера, а не с его выполнением на стороне сервера, поскольку в моем ответе, вероятно, будет менее хаки.

+0

Это можно сделать с помощью взлома: загрузить в разные версии. См. Мой ответ. –

+0

* headlap * Это то, что я имел в виду, разные версии, а не разные идентификаторы приложения, но у меня были перепутаны слова, спасибо за напоминание! Наличие разных идентификаторов приложений, взаимодействующих друг с другом, может потенциально нарушить раздел 4.3e TOS. –

1

Нет официального способа использования двух сред среды исполнения с одним приложением. Jython - это один из способов запуска кода Python в среде выполнения Java.

В зависимости от ваших потребностей вы можете попробовать использовать две разные версии приложений с тем же идентификатором приложения. Одна версия может использовать среду выполнения Java, а другая может использовать среду выполнения Python. Обе версии будут видеть одно и то же хранилище данных. Вы можете адресовать каждую версию приложения отдельно с помощью URL-адресов appspot.com, хотя они не очень хороши: http://version-id.latest.app-id.appspot.com Только одна версия может быть «стандартной» версией (http://myapp.appspot.com). Это использует 2 из ваших 10 разрешенных версий, и вы должны быть осторожны, чтобы развернуть каждую версию с правильными идентификаторами версий. Так что это не идеальное решение.

+0

«Не существует официального способа использования двух сред среды исполнения с одним приложением», но ваш второй абзац противоречит этому. –

+0

Я назначил ключевое слово в этом заявлении «официальным». Я не вижу версий по назначению, чтобы изолировать живой код, обращенный к пользователю. На мой взгляд, «официальная» версия этой функции позволила бы мне сделать это за моим доменным именем, например, с интерфейсной конфигурацией, которая маршрутизирует URL-адреса в разные экземпляры приложений, которые могут запускать другой код в разных средах исполнения. –

Смежные вопросы