Skip to content

Commit

Permalink
celery
Browse files Browse the repository at this point in the history
  • Loading branch information
imperosol committed Jan 10, 2025
1 parent 5679a6c commit a24238b
Show file tree
Hide file tree
Showing 8 changed files with 255 additions and 2 deletions.
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ DATABASE_URL=sqlite:///db.sqlite3
#DATABASE_URL=postgres://user:[email protected]:5432/sith
CACHE_URL=redis://127.0.0.1:6379/0

CELERY_BROKER_URL=redis://127.0.0.1:6379/1

MEDIA_ROOT=data
STATIC_ROOT=static

Expand Down
25 changes: 25 additions & 0 deletions docs/explanation/technos.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,31 @@ de données fonctionnent avec l'un comme avec l'autre.
Heureusement, et grâce à l'ORM de Django, cette
double compatibilité est presque toujours possible.

### Celery

[Site officiel](https://docs.celeryq.dev/en/stable/)

Dans certaines situations, on veut séparer une tâche
pour la faire tourner dans son coin.
Deux cas qui correspondent à cette situation sont :

- les tâches longues à exécuter
(comme l'envoi de mail ou la génération de documents),
pour lesquelles on veut pouvoir dire à l'utilisateur
que sa requête a été prise en compte, sans pour autant
le faire trop patienter
- les tâches régulières séparées du cycle requête/réponse.

Pour ça, nous utilisons Celery.
Grâce à son intégration avec Django,
il permet de mettre en place une queue de message
avec assez peu complexité ajoutée.

En outre, ses extensions `django-celery-results`
et `django-celery-beat` enrichissent son intégration
avec django et offrent des moyens de manipuler certaines
tâches directement dans l'interface admin de django.

## Frontend

### Jinja2
Expand Down
14 changes: 14 additions & 0 deletions docs/tutorial/install-advanced.md
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,20 @@ Toutes les requêtes vers des fichiers statiques et les medias publiques
seront seront servies directement par nginx.
Toutes les autres requêtes seront transmises au serveur django.

## Celery

Celery ne tourne pas dans django.
C'est une application à part, avec ses propres processus,
qui tourne de manière indépendante et qui ne communique
que par messages avec l'instance de django.

Pour faire tourner Celery, faites la commande suivante dans
un terminal à part :

```bash
poetry run celery -A sith worker --beat -l INFO
```


## Mettre à jour la base de données antispam

Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ dependencies = [
"ical<9.0.0,>=8.3.0",
"redis[hiredis]<6.0.0,>=5.2.0",
"environs[django]<15.0.0,>=14.1.0",
"celery[redis]<6.0.0,>=5.4.0",
"django-celery-results<3.0.0,>=2.5.1",
"django-celery-beat<3.0.0,>=2.7.0",
]

[project.urls]
Expand Down
6 changes: 6 additions & 0 deletions sith/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,9 @@
# OR WITHIN THE LOCAL FILE "LICENSE"
#
#

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ("celery_app",)
18 changes: 18 additions & 0 deletions sith/celery.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Set the default Django settings module for the 'celery' program.
import os

from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sith.settings")

app = Celery("sith")

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object("django.conf:settings", namespace="CELERY")

# Load task modules from all registered Django apps.
app.autodiscover_tasks()

14 changes: 12 additions & 2 deletions sith/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@
"django_jinja",
"ninja_extra",
"haystack",
"django_celery_results",
"django_celery_beat",
"captcha",
"core",
"club",
Expand Down Expand Up @@ -271,13 +273,13 @@

# Medias
MEDIA_URL = "/data/"
MEDIA_ROOT = env.path("MEDIA_ROOT", default="data")
MEDIA_ROOT = env.path("MEDIA_ROOT", default=BASE_DIR / "data")

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = "/static/"
STATIC_ROOT = env.path("STATIC_ROOT", default="static")
STATIC_ROOT = env.path("STATIC_ROOT", default=BASE_DIR / "static")

# Static files finders which allow to see static folder in all apps
STATICFILES_FINDERS = [
Expand Down Expand Up @@ -319,6 +321,14 @@
EMAIL_HOST = env.str("EMAIL_HOST", default="localhost")
EMAIL_PORT = env.int("EMAIL_PORT", default=25)

# Celery
CELERY_TIMEZONE = TIME_ZONE
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
CElERY_BROKER_URL = env.str("CELERY_BROKER_URL", default="redis://localhost:6379/1")
CELERY_RESULT_BACKEND = "django-db"
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"

# Below this line, only Sith-specific variables are defined

SITH_URL = env.str("SITH_URL", default="127.0.0.1:8000")
Expand Down
Loading

0 comments on commit a24238b

Please sign in to comment.