CommandError: Неизвестная команда:
Я создал пользовательскую команду и хочу запускать ее автоматически при старте
Мой командный файл
# project/parser_app/management/commands/create_schedules.py
class Command(loaddata.Command):
def handle(self, *args, **options):
# some code
Добавлена команда в wsgi.py
import os
from django.core.wsgi import get_wsgi_application
from django.core.management import call_command
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core_app.settings')
application = get_wsgi_application()
call_command("makemigrations")
call_command("migrate")
call_command("collectstatic", interactive=False)
call_command("create_schedules parser_app/management/commands/schedule_fixtures.json")
Я могу выполнить в консоли команду python manage.py "create_schedules parser_app/management/commands/schedule_fixtures.json"
и все работает, но когда я добавил команду в wsgi.py (для запуска при старте)
import os
from django.core.wsgi import get_wsgi_application
from django.core.management import call_command
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core_app.settings')
application = get_wsgi_application()
call_command("makemigrations")
call_command("migrate")
call_command("collectstatic", interactive=False)
call_command("create_schedules parser_app/management/commands/schedule_fixtures.json")
У меня ошибка
raise CommandError("Unknown command: %r" % command_name) django_1 | django.core.management.base.CommandError: Неизвестная команда: 'create_schedules parser_app/management/commands/schedule_fixtures.json'
ОБНОВИТЬ
Я пытался выполнить команду как функцию^ но получил ошибку
ile "/project/core_app/wsgi.py", line 14, in <module>
django_1 | from parser_app.management.commands.start_command import create_schedules
django_1 | File "/project/parser_app/management/commands/start_command.py", line 1, in <module>
django_1 | from parser_app.models import Schedule
django_1 | File "/project/parser_app/models.py", line 7, in <module>
django_1 | class TimeBase(models.Model):
django_1 | File "/usr/local/lib/python3.9/site-packages/django/db/models/base.py", line 127, in __new__
django_1 | app_config = apps.get_containing_app_config(module)
django_1 | File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 260, in get_containing_app_config
django_1 | self.check_apps_ready()
django_1 | File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 138, in check_apps_ready
Неправильный синтаксис, см. ниже для исправления:
call_command("create_schedules", "parser_app/management/commands/schedule_fixtures.json")
Проще было бы не иметь кода в качестве управляющей команды:
# create_schedules.py
def create_schedules(file_path):
...
# wsgi.py
import create_schedules as cs
[...]
cs.create_schedules("parser_app/management/commands/schedule_fixtures.json")
Решено с помощью функции ready() в apps.py
Мое решение
class ParserAppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'parser_app'
def ready(self):
from scripts.create_schedules import create_cron_templates
create_cron_templates()