Может ли PyAMF поддерживать развертывание службы посредством файловой системы? - PullRequest
2 голосов
/ 21 апреля 2010

Я оцениваю PyAMF, чтобы заменить нашу текущую инфраструктуру служб PHP AMF, и я не могу найти одну важную информацию, которая позволила бы мне предоставить убедительный вариант использования для переключения:

В настоящее время новые службы PHP AMF развертываются путем помещения файлов .php в файловую систему; в следующий раз, когда они получат доступ, новый сервис будет в игре Удаление службы так же просто, как удаление файла .php, который предоставил его, и, соответственно, его обновление. Мне нужна та же простота развертывания из PyAMF. Если нам потребуется переписать наши установщики для развертывания этих сервисов, это не будет началом.

Итак, что мне нужно знать, может ли PyAMF поддерживать обнаружение новых сервисов с помощью файловой системы, может ли он поддерживать обновление и удаление сервисов с помощью одного и того же, и если это так, каков наилучший способ его настройки сделать это?

Я открыт для любого из различных вариантов сервера; Я легко могу установить cherrypy, django, независимо от того, что установлено и работает самостоятельно, и даже - с немного большим усилием и drang - сделать доступными mod_python или mod_wsgi.

Ответы [ 2 ]

2 голосов
/ 22 апреля 2010

web2py включает поддержку pyamf. Это работает так, что вы создаете такие функции, как

def add(a,b): return a+b

и затем вы украшаете их с помощью @ service.amfrpc3 ('domain')

@service.amfrpc3('domain')
def add(a,b): return a+b

Вам не нужно перезагружать веб-сервер или делать что-либо еще. Вы просто добавляете и удаляете функции в своем файле контроллера (файл, в котором вы определяете сервисы), и сервис становится доступным или удаляется. Вы также можете выполнять ту же функцию, используя другие протоколы (xmlrpc, jsonrpc, rss, csv, xml, json), используя несколько декораторов.

@service.xmlrpc
@service.jsonrpc
@service.amfrpc3('domain')
def add(a,b): return a+b

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

def call(): return service()

Функции могут обращаться к уровню абстракции базы данных web2py (DAL) и (с некоторыми ограничениями) к механизму аутентификации web2py.

Вы можете редактировать контроллер, содержащий функцию, используя оболочку (emacs / vi / etc), но вы также можете использовать веб-среду IDE web2py (называемую «admin») и добавлять службы с помощью браузера.

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

Вы можете импортировать и использовать любой сторонний модуль Python. У вас должен быть предварительно установлен pyamf.

Это хорошо задокументировано в главе 9 книги:

http://web2py.com/book/default/section/9/2

Приложения web2py очень просты в развертывании. Один из способов - указать и щелкнуть используя admin. Другой способ - просто скопировать файлы с одного компьютера на другой. Здесь нет метаданных, нет процедуры установки (даже для самого web2py), нет настроек, нет файлов конфигурации. Последний процесс несколько описан здесь:

http://gluonframework.wordpress.com/2010/03/02/shell-only-web2py/

web2py основан на WSGI. Он работает с любым веб-сервером, который вы можете себе представить (apache + mod_wsgi / mod_python / mod_proxy; lighttpd / cheorkeey / ngnix + fcgi / wsgi.py; cherrypy; и т. Д.) Некоторые параметры подробно описаны здесь:

http://www.web2py.com/book/default/section/11/0

Другие опции можно найти на http://web2pyslices.com

web2py также поставляется с собственным веб-сервером Rocket, который поддерживает https и работает очень быстро. Код web2py также можно развернуть в Google App Engine.

Проверьте активность в google group web2py.

0 голосов
/ 21 апреля 2010

Я использую PyAMF вместе с Django. Возможное решение может выглядеть примерно так:

  1. Создайте модуль python, содержащий все ваши различные файлы AMF для py-файлов
  2. Создайте представление, охватывающее DjangoGateway , и инициализируйте все ваши службы. Внутри этого представления вы можете сделать следующее:
    • reload () ваш сервисный модуль
    • заполнить словарь на основе, например, имен файлов ({SERVICE_NAME: SERVICE_INSTANCE})
    • Создать DjangoGateway с этим словарем и разрешить ему обрабатывать входящий запрос.

Это хакерское решение, основанное на том факте, что вы можете только развертывать файлы без каких-либо дополнительных действий, таких как перезапуск сервера.

...