2008-09-25 13 views
11

Tengo una aplicación de 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.Ejecute el controlador Pylons como una aplicación separada?

¿Cómo puedo iniciar 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 a partir ImportServer.py en los resultados de línea de comandos en:

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

¿Alguna razón sobre por qué esto debe ser un controlador de pilones en lugar de un script normal? – nosklo

+2

¿Podría actualizar la respuesta seleccionada? La otra respuesta es la solución correcta. –

Respuesta

1

Estoy redactando mi respuesta y votando la otra respuesta de Ben Bangert, ya que es la correcta uno. 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.

+0

Sí, no pude entender cómo cargar todas las cosas que hace el pasteurizador. Su solución deja de lado eso. Gracias. – Galuvian

+0

cat'ing a script to paster shell me asusta. El shell interactivo de Python tiene reglas diferentes para, p. terminación de instrucciones de varias líneas. –

+0

Marius, eche un vistazo a la respuesta de Ben a continuación. Él es el recurso autorizado a la hora de pensar como torres de alta tensión, ya que respondí esto, descubrí cómo hacer lo mismo correctamente. –

11

Si desea cargar partes de una aplicación de Torres de alta tensión, tales como los modelos de fuera de los pilones, cargar la aplicación Torres de alta tensión en el guión primero:

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) 

que cargará la aplicación Torres de alta tensión, que establece la mayoría del estado para que pueda proceder a utilizar los modelos SQLAlchemy y la Sesión 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 una solicitud para estar en progreso para existir.

Cuestiones relacionadas