3

我正在尝试模板化我的 Apache httpd 配置以部署到不同的环境,并且我想使用 Python 语言 Cheetah 应用程序来执行此操作。但是,我在使用命令行cheetah程序时遇到了困难,我相信这是我对 Cheetah 的误解以及缺乏文档的结合。

我的目标是拥有一个 httpd.conf 模板文件并从特定于环境的定义文件中替换变量。

httpd.tmpl:

Listen $HTTP_PORT
...
#if $ENABLE_HTTPS == true
<Virtual Host *:$HTTPS_PORT>
    ...
</VirtualHost>
#end if

生产环境:

HTTP_PORT=34120
HTTPS_PORT=34121
ENABLE_HTTPS=true

填写这个 Cheetah 模板需要什么命令行?我用过:

cheetah f --oext conf --debug httpd

但显然prod.env不是作为输入文件读取的。#include在我的模板文件顶部添加一个:

#include "prod.env"

并且没有找到我的名字:

Cheetah.NameMapper.NotFound: cannot find 'APACHE_PORT'

这无论如何都不是理想的情况,因为我希望能够在命令行上为每次调用 cheetah 指定名称/值映射文件。

谢谢!

编辑:我知道我可以编写一个 python 脚本来执行文件读取,然后使用 Cheetah API 替换。但是,我正在寻找一种方法来使用命令行来填充我的模板。


解决了

感谢@pyfunc 提供的文档链接,我现在了解如何完成此操作。主要问题是--env在 cheetah 命令行上提供,它将当前环境变量传递给 cheetah。但是,必须先导出这些环境变量。

4

1 回答 1

0

Cheetah 将每个#include 文本块包装在一个嵌套的模板对象中。

采用

#include raw "prod.env"

#set global $HTTP_PORT="34120"

要包含不同的 env 文件,您也必须对其进行模板化。

请查看以下示例以获取对您有所帮助的示例。

于 2010-09-02T19:20:50.690 回答