'Django Cronjob issue With multiple Environments

I am having some issues setting up Django-crontab in my project (With Multiple enviournments).

Here we have base.py contains all common settings and we have multiple environments like local.py, production.py, etc inside the settings folder.

 settings       <-- folder  
    __init__.py  
    base.py  
    local.py  
    production.py

Multiple enviournments

I have defined my generate_data.py under an app named cron_jobs. So its location is project/cron_jobs(which is the app)/generate_data.py. Inside generate_data.py, is a function named data_detail().

I have defined 'django_crontab' under my base.py in INSTALLED_APPS.

Declare Cron Job - in local.py file

CRONTAB_COMMAND_SUFFIX = '2>&1'  
CRONJOBS = [
    ('* * * * *', 'cron_jobs.generate_data.data_detail' , '>>'+os.path.join(BASE_DIR,'log', 'debug7.log'))
]

Add Cron -

python manage.py crontab add --settings=project_dir.settings.local

Check Cron is added or not -

crontab -l

* * * * * /home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/bin/python /home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/manage.py crontab run 8d0abd75f775830eb29cddc63eeb30ea >>/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/log/debug7.log 2>&1 # django-cronjobs for convo_ocr

ERROR

Traceback (most recent call last):
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 224, in fetch_command
    **app_name = commands[subcommand]
KeyError: 'crontab'**
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/manage.py", line 34, in <module>
    main()
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/manage.py", line 29, in main
    **execute_from_command_line(sys.argv)**
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 231, in fetch_command
    settings.INSTALLED_APPS
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/conf/__init__.py", line 76, in __getattr__
    self._setup(name)
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/conf/__init__.py", line 63, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/pradeep/Desktop/phase4/convo-ocr/convo_ocr/venv/lib/python3.8/site-packages/django/conf/__init__.py", line 161, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
**django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.**

enter image(error image)

Manage.py file look like this

def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'convo_ocr.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

or image (manage.py)



Solution 1:[1]

You can specify your default settings in manage.py file

def main():
    """Run administrative tasks."""
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xtendtv_kiosk.settings.prod") <-------
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 joanis