Python Cheetah - укажите пары имя / значение для шаблонов - PullRequest
3 голосов
/ 02 сентября 2010

Я пытаюсь шаблонизировать мою конфигурацию Apache httpd для развертывания в различных средах, и я хотел бы использовать для этого приложение Cheetah на языке Python.Тем не менее, у меня возникают проблемы с программой cheetah для командной строки, и я считаю, что это сочетание моего недопонимания Cheetah и отсутствия документации.

Моя цель - создать один файл шаблона httpd.conf иподставьте переменные из файла определения среды.

httpd.tmpl:

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

production.env:

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'

В любом случае, это не идеальная ситуация, потому что я хочувозможность указать файл сопоставления имя / значение в командной строке для каждого вызова гепарда.

Спасибо!

РЕДАКТИРОВАТЬ: Я знаю, что могу написатьСценарий Python для чтения файла и его замены с использованием Cheetah API.Тем не менее, я ищу способ использования командной строки для заполнения моего шаблона.


решено

Благодаря ссылке на документацию, предоставленную @pyfuncТеперь я понимаю, как этого добиться.Основная проблема заключается в том, чтобы указать --env в командной строке гепарда, которая передает текущие переменные среды гепарду.Однако эти переменные среды должны быть экспортированы первыми.

1 Ответ

0 голосов
/ 02 сентября 2010

Гепард оборачивает каждый кусок текста #include внутри вложенного объекта Template.

Используйте

#include raw "prod.env"

также

#set global $HTTP_PORT="34120"

Чтобы включить разные env-файлы, вы тоже должны будете их шаблонизировать.

Пожалуйста, посмотрите на следующие примеры, которые должны вам помочь.

...