Frage

Ich benutze Pylonen in meinem Job, aber ich bin neu in django. Ich mache einen RSS-Anwendung Filterung, und so würde Ich mag zwei Back-End-Prozesse haben, die auf einem Zeitplan ausgeführt: ein zu kriechen RSS-Feeds für jeden Benutzer und eine andere Relevanz einzelner Beiträge in Bezug auf Benutzer Vergangenheit Präferenzen zu bestimmen. In Pylonen, würde ich nur schreiben Paster Befehle die DB mit diesen Daten zu aktualisieren. Gibt es ein Äquivalent in django? EG ist es eine Möglichkeit, um das Äquivalent von python manage.py shell in einem nicht-interaktiven Modus laufen zu lassen?

War es hilfreich?

Lösung

Ja, das ist tatsächlich, wie ich meinen cron Backup-Skripte ausgeführt werden. Sie müssen nur Ihre virtualenv laden, wenn Sie virtuelle Umgebungen und Ihre Projekteinstellungen verwenden.

Ich hoffe, dass Sie diese folgen können, aber nach der Linie # manage.py shell können Sie Ihren Code schreiben, als ob Sie in manage.py shell waren

Sie können Ihre virtualenv wie so importieren:

import site

site.addsitedir(VIRTUALENV_PATH + '/lib/python2.6/site-packages')

Sie können dann das django Projekt auf den Pfad

hinzufügen
import sys

sys.path.append(DJANGO_ROOT)
sys.path.append(PROJECT_PATH)

Als nächstes laden Sie die django Einstellungen und chdir zum django Projekt

import os

from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)

os.chdir(PROJECT_PATH)

Nach diesem Punkt wird Ihre Umgebung eingestellt wird genau wie wenn Sie mit manage.py shell gestartet

Sie können dann läuft alles so, als ob Sie in der interaktiven Shell waren.

from application.models import MyModel

for element in MyModel:
    element.delete()

Hier ist meine Backup-Datei in voller Höhe. Ich habe den Prozess hinaus in Funktionen abstrahiert. Dies würde daily_backup benannt und in den cron.daily Ordner abgelegt werden täglich ausgeführt werden soll. Sie können sehen, wie die Umgebung einzurichten und die Funktionalität nach Bedarf ändern.

#!/usr/bin/env python
import sys
import os
import site
import logging

from datetime import datetime

PROJECT_NAME = 'myproject'
DJANGO_ROOT = '/var/www/django'
PROJECT_PATH = DJANGO_ROOT + '/' + PROJECT_NAME
VIRTUALENV_PATH = '/var/www/envs/'+ PROJECT_NAME
BACKUP_DIR = '/var/www/backups/%s/daily' % (PROJECT_NAME)
TODAY = datetime.now().strftime('%Y%m%d-%H%M%S')
FILE_NAME = PROJECT_NAME + '_' + TODAY

site.addsitedir(VIRTUALENV_PATH + '/lib/python2.6/site-packages')
sys.path.append(DJANGO_ROOT)
sys.path.append(PROJECT_PATH)

from django.core.management import setup_environ
from myproject import settings
setup_environ(settings)

os.chdir(PROJECT_PATH)

# manage.py shell
from django.conf import settings

logging.basicConfig(level=logging.WARN)

def _setup():
    if not os.path.exists(BACKUP_DIR):
        logging.debug('Creating backup directory ' + BACKUP_DIR)
        os.mkdir(BACKUP_DIR)
        os.mkdir(BACKUP_DIR + '/databases')
    else:
        logging.debug('Using backup directory ' + BACKUP_DIR)

def _remove_old():
    logging.debug('Cleaning out old backups')
    # keep past 7 days
    command = "find %s* -name '%s*' -mtime +7 -exec rm {} \\;" % (BACKUP_DIR, PROJECT_NAME)
    os.system(command)

def _create_backup():
    logging.debug('Backup database')

    if settings.DATABASE_ENGINE == 'mysql':
        command = 'mysqldump -u %s --password=%s %s > %s/databases/%s.sql' % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME, BACKUP_DIR, FILE_NAME)
    else:
        command = '%s/bin/python %s/manage.py dumpdata --indent=4 > %s/databases/%s.json' % (VIRTUALENV_PATH, PROJECT_PATH, BACKUP_DIR, FILE_NAME)

    os.system(command)

    logging.debug('Backup project')
    command = 'tar -czf %s/%s.tgz -C %s %s/' % (BACKUP_DIR, FILE_NAME, DJANGO_ROOT, PROJECT_NAME)
    os.system(command)


if __name__ == '__main__':
    _setup()
    _remove_old()
    _create_backup()

Andere Tipps

Ich denke, das ist, was Benutzerdefinierte Verwaltungsbefehle sind da.

Sounds wie Sie einige twod.wsgi in Ihrem Leben benötigen: http://packages.python.org /twod.wsgi/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top