【问题标题】:Can PyAMF support service deployment by way of the filesystem?PyAMF 能否通过文件系统支持服务部​​署?
【发布时间】:2010-04-21 14:43:59
【问题描述】:

我正在评估 PyAMF 以取代我们当前的 PHP (ugh) AMF 服务框架,但我无法找到一个关键信息,可以让我提供一个令人信服的转换用例:

现在,只需将 .php 文件放入文件系统即可部署新的 PHP AMF 服务;下次访问它们时,新服务就会发挥作用。删除服务就像删除提供它的 .php 文件一样简单,更新它也相应简单。我需要 PyAMF 提供同样易于部署的功能。如果我们必须重写我们的安装程序来部署这些服务,那将是不可能的。

所以,我需要知道的是,PyAMF 是否可以通过文件系统支持新服务发现,是否可以通过相同的方式支持服务升级和删除,如果可以,最好的设置方法是什么这样做?

我对各种服务器选项持开放态度;我可以很容易地安装chermpy、django,任何安装和运行的东西,甚至——稍微猛烈一点——有mod_python或mod_wsgi可用。

【问题讨论】:

    标签: python django mod-wsgi cherrypy pyamf


    【解决方案1】:

    web2py 包含 pyamf 支持。它的工作方式是你创建像

    这样的函数
    def add(a,b): return a+b
    

    然后你用@service.amfrpc3('domain') 装饰它们

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

    您无需重新启动 Web 服务器或执行任何其他操作。您只需在控制器文件(定义服务的文件)中添加和删除函数,服务就会变为可用或删除。您还可以使用多个装饰器使用其他协议(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 身份验证机制。

    您可以使用 shell (emacs/vi/etc) 编辑包含该功能的控制器,但您也可以使用基于 web2py Web 的 IDE(称为“admin”)并使用浏览器添加服务。

    Web2py 包含一个票务系统,因此很容易调试 Web 服务。任何服务器端错误都会导致票证。管理员中有一个网页列出了所有票证。您单击一个,它会显示导致问题的代码和完整的回溯。

    您可以导入和使用任何第三方 python 模块。您必须预先安装 pyamf。

    这在本书的第 9 章中有详细记录:

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

    web2py 应用非常容易部署。一种方法是使用管理员点击。另一种方法是简单地将文件从一台机器复制到另一台机器。没有元数据,没有安装过程(甚至 web2py 本身也没有),没有设置,没有配置文件。 后一个过程在这里有所描述:

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

    web2py 基于 WSGI。它可以与您能想到的任何 Web 服务器一起运行(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 还自带了自己的 web 服务器 Rocket,它支持 https,速度非常快。 web2py 代码也可以部署在 Google App Engine 上。

    检查 web2py google 组上的活动。

    【讨论】:

      【解决方案2】:

      我将 PyAMF 与 Django 一起使用。可能的解决方案大致如下所示:

      1. 创建一个包含所有不同 AMF 服务 py 文件的 python 模块
      2. 创建一个包装 DjangoGateway 的视图并初始化所有服务。在此视图中,您可以执行以下操作:
        • reload() 你的服务模块
        • 根据文件名 ({SERVICE_NAME: SERVICE_INSTANCE}) 填充字典
        • 用这个字典实例化 DjangoGateway 并让它处理传入的请求。

      这是一个骇人听闻的解决方案,因为您只能部署文件而无需任何其他操作,例如重新启动服务器。

      【讨论】:

      • 感谢您最初的建议。我承认,如果我能找到一个,我正在寻找一种非 hacky 的解决方案。不过,我会记住这一点。我想您没有完整的示例或教程的链接来介绍这种方法吗?
      • 不,抱歉我没有。但最简单的方法是使用 fastcgi 的 lighttpd。然后将新的 fcgi python 文件放在服务器根目录中。
      猜你喜欢
      • 2023-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      相关资源
      最近更新 更多