2008-09-25 5 views
11

У меня есть приложение Pylons, где я хотел бы переместить часть логики в отдельный пакетный процесс. Я запускаю его под основным приложением для тестирования, но он будет делать большую работу в базе данных, и я бы хотел, чтобы это был отдельный процесс, который будет постоянно работать в фоновом режиме. Основное приложение pylons будет отправлять задания в базу данных, а новый процесс будет выполнять работу, запрошенную в каждом задании.Управляйте контроллером 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 
+0

Любая причина в том, почему это должен быть контроллер пилонов вместо обычного сценария? – nosklo 2008-09-25 17:15:21

+2

Не могли бы вы изменить выбранный ответ? Другой ответ - правильное решение. – 2009-09-18 15:14:51

ответ

1

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

11

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

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) 

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

Обратите внимание, что если ваш код использует глобальные символы пилонов, такие как запрос/ответ/etc, то это не сработает, так как они требуют, чтобы запрос продолжал существовать.

Смежные вопросы