将Pylons控制器作为单独的应用程序运行?
时间:2020-03-06 14:43:54 来源:igfitidea点击:
我有一个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
解决方案
我正在编辑我的回答,并赞成Ben Bangert的其他回答,因为这是正确的回答。我回答了,此后已经学会了正确的方法(如下所述)。如果确实需要,请查看此答案的历史记录,以查看我最初提出的错误(但有效)的解决方案。
如果要加载Pylons应用程序的某些部分,例如从外部Pylons加载模型,请首先在脚本中加载Pylons应用程序:
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)
这将加载Pylons应用程序,该应用程序将设置大部分状态,以便我们可以继续使用SQLAlchemy模型和Session来处理数据库。
请注意,如果代码使用的是诸如请求/响应/等之类的挂架全局变量,那么它将无法正常工作,因为它们需要正在进行的请求。