python - starcraft - ¿Ejecuta el controlador Pylons como una aplicación separada?
python de (2)
Si desea cargar partes de una aplicación Pylons, como los modelos de Pylons externos, primero cargue la aplicación Pylons en el script:
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)
Eso cargará la aplicación Pylons, que configura la mayor parte del estado para que pueda proceder a utilizar los modelos SQLAlchemy y Session para trabajar con la base de datos.
Tenga en cuenta que si su código está utilizando los pilones globales como request / response / etc, entonces eso no funcionará, ya que requieren que exista una solicitud para estar en progreso.
Tengo una aplicación Pylons donde me gustaría mover parte de la lógica a un proceso por lotes por separado. Lo he estado ejecutando bajo la aplicación principal para probar, pero va a hacer mucho trabajo en la base de datos, y me gustaría que fuera un proceso separado que se ejecutará en segundo plano constantemente. La aplicación principal de pilones enviará trabajos a la base de datos, y el nuevo proceso hará el trabajo solicitado en cada trabajo.
¿Cómo puedo lanzar un controlador como un script independiente?
Actualmente tengo:
from warehouse2.controllers import importServer
importServer.runServer(60)
y en el archivo del controlador, pero no forma parte de la clase del 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)
Pero al iniciar ImportServer.py en la línea de comando, se obtiene:
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
Estoy redactando mi respuesta y votando la otra respuesta de Ben Bangert, ya que es la correcta. Respondí y desde entonces aprendí la forma correcta (se menciona a continuación). Si realmente lo desea, revise el historial de esta respuesta para ver la solución incorrecta (pero funcional) que propuse originalmente.