One of the issue I faced while developing a website in Django was I always had a script which collects or data which is to be in the cron. But Django usually needs a lot of configurations and settings for the environment to run. So after some searches I got that django has an undocumented API of settings which we would use of the same. So here is a file which you could include for any file you would like to run as cron and this file would do the rest.
import os, sys, re
top_level_rx = re.compile(r'^(/|[a-zA-Z]:\\)$')
def is_top_level(path):
return top_level_rx.match(path) is not None
def prepare_environment():
# we'll need this script's directory for searching purposess
curdir, curfile = os.path.split(os.path.abspath(__file__))
# move up one directory at a time from this script's
# path, searching for settings.py
settings_module = None
while not settings_module:
try:
sys.path.append(curdir)
settings_module = __import__('settings', {}, {}, [''])
sys.path.pop()
break
except ImportError:
settings_module = None
# have we reached the top-level directory?
if is_top_level(curdir):
raise Exception("settings.py was not found in the script's directory or any of its parent directories.")
# move up a directory
curdir = os.path.normpath(os.path.join(curdir, '..'))
# set up the environment using the settings module
from django.core.management import setup_environ
setup_environ(settings_module)
prepare_environment()
Lets name this file as cron_settings.py . So each script which is to be inserted in cron can include this file as
import cron_settings
And they should be good to run as cron.
There is also another method which I used to use. I moved from this method as it used to have the paths hard coded so it wasn’t portable but here it is:
import django import os import sys sys.path += ['/usr/bin/python'] sys.path += ['<Django Folder>'] sys.path += ['<Django Project Path>'] os.environ['DJANGO_SETTINGS_MODULE'] = '<DjangoProject>.settings'
Well both works. So you could use the one which suits you more.
Recent Comments