我需要运行到Heroku的web工作,每天晚上需要为Elasticsearch生成索引,我想知道是否可能。我需要在python shell上自动运行的命令是:
heroku run python3 manage.py shell --app My_app
from myapp.search_tasks import delete_index, create_index, index_all;
delete_index(); create_index(); index_all();
非常感谢你的帮助。
你可以实现一个管理命令[Django-doc]来做到这一点。在你的应用程序中,你创建了management/
和commands/
目录:
myapp/
__init__.py
management/
commands/
make_es_index.py
models.py
views.py
urls.py
然后在make_es_index.py
中,您可以定义该命令:
# my_app/management/commanheroku addons:open schedulerds/make_es_index.py
from django.core.management.base import BaseCommand, no_translations
from myapp.search_tasks import delete_index, create_index, index_all
class Command(BaseCommand):
def handle(self, *args, **options):
delete_index()
create_index()
index_all()
接下来我们可以在Heroku中调度任务,例如使用Heroku Scheduler。我们使用以下命令安装附加组件:
heroku addons:createscheduler:standard
接下来我们在bin/refresh-es-index
中创建一个任务:
#!/bin/bash
cd 'root/of/django-project'
python3 manage.pymake_es_index
接下来我们可以调度refresh-es-index
任务:
herokuaddons:打开scheduler
并设置需要运行作业的时间间隔