PasteDeploy配置文件

通过A生成的包 cookiecutter 利用一个由伊恩·比金创建的名为 PasteDeploy . PasteDeploy定义了一种声明 WSGI 应用程序配置 .ini 文件。

金字塔使用此配置文件格式作为其 WSGI 服务器转轮 pserve 以及其他命令,例如 pviewspshellproutesptweens .

PasteDeploy不是金字塔的一个特别组成部分。可以创建一个根本不使用PasteDeploy的金字塔应用程序。我们显示了一个不在中使用PasteDeploy的金字塔应用程序 创建您的第一个 Pyramid 应用 . 但是,金字塔CookiCutter呈现PasteDeploy配置文件,为新开发人员提供设置部署值的标准化方法,并为新用户提供启动、停止和调试应用程序的标准化方法。

本章并不能替代关于pastedeploy的文档;它只将pastedeploy在金字塔中的使用上下文化。有关详细文档,请参阅https://docs.pylonsproject.org/projects/pastedeploy/en/latest/。

PasteDeploy

plaster 是金字塔用于从配置文件加载设置的系统。这些文件最常见的格式是 .ini 按定义的方式构造的格式 PasteDeploy . 该格式支持定义wsgi应用程序的机制。 deployment settings ,wsgi服务器设置和日志记录。这允许 pserve 命令工作,允许您轻松停止和启动金字塔应用程序。

入口点和PasteDeploy .ini 文件夹

创建一个 Pyramid 项目 第章,我们简单介绍了 deployment.ini 文件。这就是 use = egg:myproject 线在 [app:main] 部分。我们对此轻而易举地解释了一下,因为对于系统的介绍来说,它非常混乱,而且“信息太多”。我们在这里尽量引起注意。让我们再次查看配置文件:

 1###
 2# app configuration
 3# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
 4###
 5
 6[app:main]
 7use = egg:myproject
 8
 9pyramid.reload_templates = true
10pyramid.debug_authorization = false
11pyramid.debug_notfound = false
12pyramid.debug_routematch = false
13pyramid.default_locale_name = en
14pyramid.includes =
15    pyramid_debugtoolbar
16
17# By default, the toolbar only appears for clients from IP addresses
18# '127.0.0.1' and '::1'.
19# debugtoolbar.hosts = 127.0.0.1 ::1
20
21###
22# wsgi server configuration
23###
24
25[server:main]
26use = egg:waitress#main
27listen = localhost:6543
28
29###
30# logging configuration
31# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
32###
33
34[loggers]
35keys = root, myproject
36
37[handlers]
38keys = console
39
40[formatters]
41keys = generic
42
43[logger_root]
44level = INFO
45handlers = console
46
47[logger_myproject]
48level = DEBUG
49handlers =
50qualname = myproject
51
52[handler_console]
53class = StreamHandler
54args = (sys.stderr,)
55level = NOTSET
56formatter = generic
57
58[formatter_generic]
59format = %(asctime)s %(levelname)-5.5s [%(name)s:%(lineno)s][%(threadName)s] %(message)s

线在 [app:main] 上面说 use = egg:myproject 实际上是较长拼写的缩写: use = egg:myproject#main . 这个 #main 为了简洁起见省略了部分,如 #main 是由PasteDeploy定义的默认值。 egg:myproject#main 是一个字符串,它具有粘贴部署的含义。它指向一个 Setuptools entry point 已命名 main 定义在 myproject 项目。

看看生成的 setup.py 此项目的文件。

 1import os
 2
 3from setuptools import setup, find_packages
 4
 5here = os.path.abspath(os.path.dirname(__file__))
 6with open(os.path.join(here, 'README.txt')) as f:
 7    README = f.read()
 8with open(os.path.join(here, 'CHANGES.txt')) as f:
 9    CHANGES = f.read()
10
11requires = [
12    'plaster_pastedeploy',
13    'pyramid',
14    'pyramid_jinja2',
15    'pyramid_debugtoolbar',
16    'waitress',
17]
18
19tests_require = [
20    'WebTest',
21    'pytest',
22    'pytest-cov',
23]
24
25setup(
26    name='myproject',
27    version='0.0',
28    description='myproject',
29    long_description=README + '\n\n' + CHANGES,
30    classifiers=[
31        'Programming Language :: Python',
32        'Framework :: Pyramid',
33        'Topic :: Internet :: WWW/HTTP',
34        'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
35    ],
36    author='',
37    author_email='',
38    url='',
39    keywords='web pyramid pylons',
40    packages=find_packages(exclude=['tests']),
41    include_package_data=True,
42    zip_safe=False,
43    extras_require={
44        'testing': tests_require,
45    },
46    install_requires=requires,
47    entry_points={
48        'paste.app_factory': [
49            'main = myproject:main',
50        ],
51    },
52)

注意 entry_points 分配了一个看起来很像 .ini 文件。此字符串表示的 .ini 文件有一个名为的节 [paste.app_factory] . 在此部分中,有一个名为 main (入口点名称)具有值 myproject:main . 这个 key main 是我们的什么 egg:myproject#main 价值观 use 配置文件中的节指向,尽管它实际上被缩短为 egg:myproject 那里。该值表示 dotted Python name 路径,它指的是 myproject 包装的 __init__.py 模块。

这个 egg: 前缀位于 egg:myproject 指示这是一个入口点。 URI 说明符,其中“方案”是“蛋”。安装项目时会创建一个“鸡蛋”。

因此,在英语中,该入口点可以称为“PasteDeploy应用程序工厂” myproject 入口点名为的项目 main 其中入口点指 main 功能在 mypackage 模块“。事实上,如果你打开 __init__.py 在cookiecutter生成的包中生成的模块,您将看到 main 功能。这是由调用的函数 PasteDeploypserve 对应用程序调用命令。它接受全局配置对象并 收益率 应用程序的实例。

[DEFAULT] PasteDeploy的部分 .ini 文件

您可以添加 [DEFAULT] 部分到您的PasteDeploy .ini 文件。这样的部分应该由所有应用程序、服务器和 middleware 在配置文件中定义。A中的值 [DEFAULT] 部分将传递给您的应用程序 main 函数作为 global_config (参见参考 main 中的函数 __init__.py

可选配置文件格式

可以使用不同的文件格式 Pyramid 如果你不喜欢 PasteDeploy . 在引擎盖下,所有命令行脚本,如 pservepshell 通过 config_uri (例如, development.iniproduction.iniplaster 为适当的分析器执行查找的库。为了 .ini 它使用的文件是pastedeploy,但是您可以注册自己的配置格式,而pastedeploy会找到这些格式。