2008-09-25 7 views
11

Mam aplikację Pylons, w której chciałbym przenieść część logiki do oddzielnego procesu wsadowego. Używałem go pod główną aplikacją do testowania, ale będzie dużo pracy w bazie danych i chciałbym, aby był to osobny proces, który będzie działał w tle w sposób ciągły. Główna aplikacja pylonów przekaże zadania do bazy danych, a nowy proces wykona zadanie wymagane w każdym zadaniu.Kontroler Run Pylons jako osobna aplikacja?

Jak uruchomić kontroler jako samodzielny skrypt?

Obecnie mam:

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

iw pliku sterownika, ale nie część klasy kontrolera:

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) 

Ale zaczynając ImportServer.py na wynikach w linii poleceń:

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

Jakiś powód, dla którego musi to być kontroler pylonów zamiast zwykłego skryptu? – nosklo

+2

Czy możesz zaktualizować wybraną odpowiedź? Druga odpowiedź to poprawne rozwiązanie. –

Odpowiedz

1

Redaguję moją odpowiedź i przechwalam drugą odpowiedź Ben Bangerta, ponieważ jest poprawna jeden. Odpowiedziałem i od tamtej pory nauczyłem się właściwej drogi (wspomnianej poniżej). Jeśli naprawdę chcesz, zapoznaj się z historią tej odpowiedzi, aby zobaczyć niewłaściwe (ale działające) rozwiązanie, które pierwotnie zaproponowałem.

+0

Tak, nie mogłem dowiedzieć się, jak załadować wszystkie rzeczy, które robi paster. Twoje rozwiązanie ładnie to obchodzi. Dzięki. – Galuvian

+0

Cat'ing skrypt do skorupy skorupy mnie przeraża. Interaktywna powłoka Pythona ma inne reguły, na przykład kończące wyciągi wieloliniowe. –

+0

Marius, spójrz na odpowiedź Bena poniżej. Jest autorytatywny, jeśli chodzi o myślenie jak pylony, ponieważ odpowiedziałem na to, zrozumiałem, jak zrobić to samo poprawnie. –

11

Jeśli chcesz załadować części app pylony, takich jak modele spoza Pylony, załadować aplikację Pylons w skrypcie pierwsze:

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) 

To będzie załadować aplikację Pylons, który określa się najbardziej stanu, aby można było używać modeli SQLAlchemy i sesji do pracy z bazą danych.

Pamiętaj, że jeśli twój kod korzysta z globów pylonów, takich jak żądanie/odpowiedź/itp., To nie będzie działać, ponieważ wymaga, aby żądanie było w toku.

Powiązane problemy