Pyramid 部署

2023-03-30 17:59 更新

到目前为止,本教程中开发的Pyramid应用程序的例子都是在本地机器上执行的。为了使其能够公开访问,必须将其部署在一个能够满足WSGI标准的生产服务器上。

许多WSGI兼容的http服务器可用于此目的。例如 –

  • waitress
  • paste.httpserver
  • CherryPy
  • uWSGI
  • gevent
  • mod_wsgi

我们已经讨论了如何使用Waitress服务器来托管一个Pyramid应用程序。它可以在拥有公共IP地址的机器的80(HTTP)和443(HTTPS)端口上提供服务。

mod_wsgi

Apache服务器是一个流行的开源HTTP服务器软件,由Apache软件基金会发布。它为互联网上的大多数网络服务器提供动力。 mod_wsgi (由 Graham Dumpleton 开发)是一个Apache模块,为在Apache上部署基于Python的web应用程序提供了一个WSGI接口。

在本节中,我们将逐步解释在Apache服务器上部署Pyramid应用程序的过程。在这里,我们将使用XAMPP,一个流行的开源Apache发行版。它可以从https://www.apachefriends.org/download.html 下载。

mod_wsgi模块是通过PIP安装程序安装的。在安装之前,将MOD_WSGI_APACHE_ROOTDIR环境变量设置为Apache可执行文件所在的目录。

C:\Python310\Scripts>set MOD_WSGI_APACHE_ROOTDIR=C:/xampp/apache
C:\Python310\Scripts>pip install mod_wsgi

接下来,在命令终端运行以下命令。

C:\Python310\Scripts>mod_wsgi-express module-config
LoadFile "C:/Python310/python310.dll"
LoadModule wsgi_module "C:/Python310/lib/site-packages/mod_wsgi/server/mod_wsgi.cp310-win_amd64.pyd"
WSGIPythonHome "C:/Python310"

这些是mod_wsgi模块的设置,要纳入Apache的配置文件。打开你的XAMPP安装的 httpd.conf 文件,将上述命令行的输出复制到其中。

接下来,为我们的应用程序创建一个虚拟主机配置。Apache在 httpd-vhosts.conf 文件中存储虚拟主机信息,该文件在C:\XAMPP\Apache\conf\extra\文件夹中找到。打开该文件并在其中添加以下几行

<VirtualHost *>
   ServerName localhost:6543
   WSGIScriptAlias / e:/pyramid-env/hello/production.ini
   <Directory e:/pyramid-env/hello>
      Order deny,allow
      Allow from all
      Require all granted
   </Directory>
</VirtualHost>

这里假设使用Cookiecutter工具构建了一个Hello Pyramid项目。这里使用的是生产环境中使用的PasteDeploy配置文件。

这个虚拟主机配置需要被纳入Apache的httpd.conf文件中。这可以通过在文件中添加以下几行来完成

# Virtual hosts
   Include conf/extra/httpd-vhosts.conf

我们现在必须将以下代码保存为 pyramid.wsgi 文件,该文件返回Pyramid WSGI应用程序对象。

from pyramid.paster import get_app, setup_logging
ini_path = 'e:/pyramid-env/hello/production.ini'
setup_logging(ini_path)
application = get_app(ini_path, 'main')

执行上述程序后,重新启动XAMPP服务器,我们应该能够在Apache服务器上运行Pyramid应用程序。

在Uvicorn上部署

Uvicorn是一个兼容ASGI的服务器(ASGI是指异步网关接口)。由于Pyramid是一个基于WSGI的Web框架,我们需要将WSGI应用对象转换为ASGI对象,借助于 asgiref.wsgi 模块中定义的 WsgiToAsgi() 函数。

from asgiref.wsgi import WsgiToAsgi
from pyramid.config import Configurator
from pyramid.response import Response

def hello_world(request):
   return Response("Hello")

with Configurator() as config:
   config.add_route("hello", "/")
   config.add_view(hello_world, route_name="hello")
   wsgi_app = config.make_wsgi_app()

app = WsgiToAsgi(wsgi_app)

将上述代码保存为app.py。用pip工具安装Uvicorn。

pip3 install uvicorn

在ASGI模式下运行Pyramid应用程序。

uvicorn app:app

同样,它也可以使用 daphne 服务器来提供服务。

daphne app:app


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号