3

我问了一个前面的问题,让 django 命令按计划运行。我得到了这个问题的解决方案,但我仍然想让我的命令从管理界面运行。我遇到的障碍是,一旦我进入管理界面,我的自定义管理命令就无法被识别。

我将此追溯到实用程序的__init__.py文件。django/core/management似乎发生了一些奇怪的行为。当服务器首次启动时,字典变量 _commands 会填充核心命令(from django/core/management/commands)。来自所有已安装应用程序的自定义管理命令也被推送到 _commands 变量中,以获得所有管理命令的整体字典。

不知何故,虽然在服务器启动和 django-chronograph 从管理界面运行作业之间, _commands 变量丢失了自定义命令;字典中唯一的命令是核心命令。我不确定这是为什么。会不会是路径问题?我错过了一些设置吗?这是 django-chronograph 的特定问题吗?所以忘记调度。 我如何从 django 管理图形界面运行自定义管理命令来证明它确实可以完成?或者更确切地说,我如何确保可以从所述界面获得自定义管理命令?

4

2 回答 2

1

我也在使用django-chronograph

对我来说效果很好。我也确实遇到过我的自定义命令未被自动发现功能识别的问题。我认为第一个原因是因为自定义命令有错误。因此,检查您的自定义命令是否从命令行运行是否没有问题可能是一个想法。

第二个原因确实是一些奇怪的路径问题。我可能会与我的托管服务提供商联系,为您提供解决方案。过几天回复你。。

于 2010-12-26T02:04:00.363 回答
0

我是汤姆汤姆上面提到的“unix-guy”。

据我记得,cronograph 代码本身存在一些问题,因此最好使用评论中发布的代码 tom tom。

django-cronograph 存储在文件系统的哪个位置(在您的应用程序文件夹中,在额外的“lib 文件夹”中或在您的站点包中?

当您将它放在站点包或“全局pythonpath”路径中的另一个文件夹中时,应该没有问题。

cron 进程本身不使用与您的 django 应用程序相同的 pythonpath。请记住:您通过您的 crontab 启动 cron 进程 - 对吗?所以有 2 个不同的进程彼此不“认识”:cron 进程和 django 进程(由网络服务器初始化)所以我建议通过 crontab 调用以下脚本并再次导出 pythonpath:

#!/bin/bash

PYTHONPATH=/path/to/libs:/path/to/project_root:/path/to/other/libs/used/in/project
export PYTHONPATH

python /path/to/project/manage.py cron

因此 cron-started-process 具有与您的项目相同的 pythonpath 信息。

来自维也纳/奥地利的 greez

伯尼

于 2010-12-29T12:36:05.677 回答