воскресенье, 16 августа 2009 г.

Python Paste и PyBlosxom

Связка Apache2 + mod_wsgi оказалась мало пригодной для web разработки. Когда приложение отлажено и стабильно работает, претензий нет, а вот отладка и переключение между разными экспериментальными ветками крайне не удобны. Пока конфиги исправишь, уже забыл чего хотел делать. К сожалению, дневник на PyBlosxom как раз этот случай.

Версия 1.4.3 безнадежно устарела, в trunk постоянно какие-то изменения, да и меня регулярно тянет что-то поправить. После очередного изменения, вовсе не факт, что что-то вообще работать будет. Нужен способ, быстро проверять разные версии настроек и кода в работе и при необходимости откатываться назад.

В документации нашел Installing PyBlosxom with Paste. Фактически, тот же WSGI, только Python Paste — это Python и приложение можно по-быстрому запускать. Описанный вариант не многим лучше Apache, но его достаточно просто подогнать под мои нужды. Поскольку paster ищет конфиги и код в PYTNONPATH, можно использовать оболочку, которая будет подставлять нужные значения перед запуском. Сильно не заморачивался, сделал такой вот run_blog.py:

import sys
import os
import os.path

paster  = "путь до paster"
inifile = "blog.ini"


def main(argv=None):
if argv is None:
   argv = sys.argv

confdir = argv[1]
codedir = argv[2]

env = os.environ.copy()
env["PYTHONPATH"] = os.pathsep.join(
   [ os.path.join(os.getcwd(), "etc", confdir),
     os.path.join(os.getcwd(), "src", "pyblosxom", codedir)
     ] + env.get("PYTHONPATH", "").split(os.pathsep)
   )

return os.spawnle(os.P_WAIT, paster, paster, "serve", inifile, env)


if __name__ == "__main__":
   sys.exit(main(sys.argv))

Конфигурационный файл blog.ini для Paste Script:

[DEFAULT]
debug = True

[server:main]
use  = egg:Paste#http
host = 127.0.0.1
port = 5000

[app:main]
paste.app_factory = Pyblosxom.pyblosxom:pyblosxom_app_factory

Структура каталогов:

+- etc              -- каталоги с config.py
|  +- main          -- настрйки используемые в Apache
|  |  +- config.py
|  +- ...
+- data             -- содержимое дневника
+- src
|  +- pyblosxom     -- исходники движка
|  |  +- main       -- "стабильный" код используемый в Apache
|  |  +- up-trunk   -- код из SVN trunk
|  |  +- ...
+- run_blog.py
+- blog.ini

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

run_blog.py main main
то же, что и в Apache, но проще отлаживаться.

run_blog.py main up-trunk
проверка, как ведет себя движок из SVN trunk

hg clone src/pyblosxom/main src/pyblosxbom/my-branch
run_blog.py main my-branch
создание экспериментальной ветки и запуск блога с неё

Остается, правда, небольшая проблема - кое-где в настройках прописаны абсолютные пути. Как результат, не всякие настройки подходят ко всякому коду. Это лечится исправлением движка, что теперь сделать будет проще.

Комментариев нет:

Отправить комментарий