controlador Run Pilões como aplicativo separado?
Pergunta
Eu tenho um aplicativo Pilões onde eu gostaria de passar um pouco da lógica para um processo em lote separado. Fui correndo-lo sob o aplicativo principal para testar, mas ele vai estar fazendo um monte de trabalho no banco de dados, e eu gostaria que ele seja um processo separado que será executado em segundo plano constantemente. O aplicativo principais pilares irão enviar trabalhos para o banco de dados e o novo processo vai fazer o trabalho solicitado em cada trabalho.
Como posso lançar um controlador como um só roteiro estande?
Eu tenho atualmente:
from warehouse2.controllers import importServer
importServer.runServer(60)
e no arquivo do controlador, mas não faz parte da classe do controlador:
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)
Mas a partir ImportServer.py nos resultados de linha de comando em:
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
Solução
Estou redacting a minha resposta e upvoting a outra resposta por Ben Bangert, como é o correto. Eu respondi e, desde então, aprendeu a maneira correta (mencionado abaixo). Se você realmente quiser, confira a história desta resposta para ver o errado (mas de trabalho) solução que originalmente proposto.
Outras dicas
Se você quiser partes de carga de um aplicativo de Pilões, tais como os modelos de Pilões fora, carregar o aplicativo Pilões no script em primeiro lugar:
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)
Isso irá carregar o aplicativo Pilares, que define a maior parte do Estado, de modo que você pode continuar a usar os modelos SQLAlchemy e sessão de trabalho com o banco de dados.
Note que, se o código está usando os globals postes, como pedido / resposta / etc, então, que não vai funcionar uma vez que exigem um pedido para estar em andamento de existir.