Запустить контроллер Pylons как отдельное приложение? - PullRequest
11 голосов
/ 25 сентября 2008

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

Как запустить контроллер как отдельный скрипт?

В настоящее время у меня есть:

from warehouse2.controllers import importServer
importServer.runServer(60)

и в файле контроллера, но не является частью класса контроллера:

def runServer(sleep_secs):
    try:
        imp = ImportserverController()
        while(True):
            imp.runImport()
            sleepFor(sleep_secs)

    except Exception, e:
        log.info("Unexpected error: %s" % sys.exc_info()[0])
        log.info(e)

Но запуск ImportServer.py в командной строке приводит к:

2008-09-25 12:31:12.687000 Could not locate a bind configured on mapper Mapper|I
mportJob|n_imports, SQL expression or this Session

Ответы [ 2 ]

11 голосов
/ 24 апреля 2009

Если вы хотите загрузить части приложения Pylons, например, модели из-за пределов Pylons, сначала загрузите приложение Pylons в сценарии:

from paste.deploy import appconfig
from pylons import config

from YOURPROJ.config.environment import load_environment

conf = appconfig('config:development.ini', relative_to='.')
load_environment(conf.global_conf, conf.local_conf)

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

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

1 голос
/ 25 сентября 2008

Я редактирую свой ответ и отказываюсь от ответа другого ответа Бена Бангерта, поскольку он правильный. Я ответил и с тех пор выучил правильный путь (упомянутый ниже). Если вы действительно хотите, просмотрите историю этого ответа, чтобы увидеть неправильное (но работающее) решение, которое я первоначально предложил.

...