问题 运行Pylons控制器作为单独的应用程序?


我有一个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

3720
2017-09-25 16:34


起源

有什么理由为什么这必须是一个pylons控制器而不是一个普通的脚本? - nosklo
你能更新选定的答案吗?另一个答案是正确的解决方案。 - Douglas Mayle


答案:


我正在编写我的回复并提出Ben Bangert的另一个回答,因为它是正确的。我回答并从那时起就学会了正确的方法(如下所述)。如果您真的想要,请查看此答案的历史记录,以查看我最初提出的错误(但有效)的解决方案。


1
2017-09-25 19:04



是的,我无法弄清楚如何加载贴纸所做的所有东西。你的解决方案很好地回避了这一点。谢谢。 - Galuvian
cat to to to to to to to to to to to to to to to to to to to交互式Python shell具有不同的规则,例如终止多行语句。 - Marius Gedminas
马吕斯,看看本的答案如下。当他想到像塔一样时,他是权威的资源,因为我回答了这个问题,我想出了如何正确地做同样的事情。 - Douglas Mayle


如果要加载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来使用数据库。

请注意,如果您的代码使用pylons全局变量(例如request / response / etc),那么这将无效,因为它们需要正在进行的请求才能存在。


11
2018-04-24 03:42