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
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
###
# app configuration
# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###

[app:main]
use = egg:myproject

pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
pyramid.includes =
    pyramid_debugtoolbar

# By default, the toolbar only appears for clients from IP addresses
# '127.0.0.1' and '::1'.
# debugtoolbar.hosts = 127.0.0.1 ::1

###
# wsgi server configuration
###

[server:main]
use = egg:waitress#main
listen = localhost:6543

###
# logging configuration
# https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
###

[loggers]
keys = root, myproject

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console

[logger_myproject]
level = DEBUG
handlers =
qualname = myproject

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(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 此项目的文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import os

from setuptools import setup, find_packages

here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.txt')) as f:
    README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
    CHANGES = f.read()

requires = [
    'plaster_pastedeploy',
    'pyramid',
    'pyramid_jinja2',
    'pyramid_debugtoolbar',
    'waitress',
]

tests_require = [
    'WebTest',
    'pytest',
    'pytest-cov',
]

setup(
    name='myproject',
    version='0.0',
    description='MyProject',
    long_description=README + '\n\n' + CHANGES,
    classifiers=[
        'Programming Language :: Python',
        'Framework :: Pyramid',
        'Topic :: Internet :: WWW/HTTP',
        'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
    ],
    author='',
    author_email='',
    url='',
    keywords='web pyramid pylons',
    packages=find_packages(),
    include_package_data=True,
    zip_safe=False,
    extras_require={
        'testing': tests_require,
    },
    install_requires=requires,
    entry_points={
        'paste.app_factory': [
            'main = myproject:main',
        ],
    },
)

注意 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 说明符,其中“scheme”是“egg”。当你跑步时,会产生一个“鸡蛋” setup.py installsetup.py develop 在你的项目中。

因此,在英语中,该入口点可以称为“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会找到这些格式。