forked from ScoDoc/DocScoDoc
Remplace memcached par Redis
This commit is contained in:
parent
da4cea0316
commit
3b5b449a8a
@ -150,11 +150,7 @@ de votre installation ScoDoc 7 pour passer à ScoDoc 8 (*ne pas utiliser en prod
|
|||||||
|
|
||||||
En tant qu'utilisateur `scodoc` (pour avoir accès aux bases départements de ScoDoc7):
|
En tant qu'utilisateur `scodoc` (pour avoir accès aux bases départements de ScoDoc7):
|
||||||
|
|
||||||
1. Lancer memcached:
|
Dans un terminal, lancer le serveur:
|
||||||
|
|
||||||
memcached
|
|
||||||
|
|
||||||
2. Dans un autre terminal, lancer le serveur:
|
|
||||||
|
|
||||||
export FLASK_APP=scodoc.py
|
export FLASK_APP=scodoc.py
|
||||||
export FLASK_ENV=development
|
export FLASK_ENV=development
|
||||||
|
@ -33,7 +33,12 @@ mail = Mail()
|
|||||||
bootstrap = Bootstrap()
|
bootstrap = Bootstrap()
|
||||||
moment = Moment()
|
moment = Moment()
|
||||||
|
|
||||||
cache = Cache(config={"CACHE_TYPE": "MemcachedCache"}) # XXX TODO: configuration file
|
cache = Cache( # XXX TODO: configuration file
|
||||||
|
config={
|
||||||
|
# "CACHE_TYPE": "MemcachedCache"
|
||||||
|
"CACHE_TYPE": "RedisCache"
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def create_app(config_class=Config):
|
def create_app(config_class=Config):
|
||||||
|
@ -974,7 +974,7 @@ def MonthTableBody(
|
|||||||
#
|
#
|
||||||
# Cache absences
|
# Cache absences
|
||||||
#
|
#
|
||||||
# On cache (via memcached ou autre, voir sco_cache.py) les _nombres_ d'absences
|
# On cache (via REDIS ou autre, voir sco_cache.py) les _nombres_ d'absences
|
||||||
# (justifiées et non justifiées) de chaque etudiant dans un semestre donné.
|
# (justifiées et non justifiées) de chaque etudiant dans un semestre donné.
|
||||||
# Le cache peut être invalidé soit par étudiant/semestre, soit pour tous
|
# Le cache peut être invalidé soit par étudiant/semestre, soit pour tous
|
||||||
# les étudiant d'un semestre.
|
# les étudiant d'un semestre.
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
"""Gestion des caches
|
"""Gestion des caches
|
||||||
|
|
||||||
Ré-écrite pour ScoDoc8, utilise flask_caching et memcached
|
Ré-écrite pour ScoDoc8, utilise flask_caching et REDIS
|
||||||
|
|
||||||
ScoDoc est maintenant multiprocessus / mono-thread, avec un cache en mémoire partagé.
|
ScoDoc est maintenant multiprocessus / mono-thread, avec un cache en mémoire partagé.
|
||||||
"""
|
"""
|
||||||
@ -57,7 +57,6 @@
|
|||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import pylibmc
|
|
||||||
from flask import g
|
from flask import g
|
||||||
|
|
||||||
from app.scodoc import notesdb as ndb
|
from app.scodoc import notesdb as ndb
|
||||||
@ -84,8 +83,8 @@ class ScoDocCache:
|
|||||||
"""Returns cached evaluation, or None"""
|
"""Returns cached evaluation, or None"""
|
||||||
try:
|
try:
|
||||||
return CACHE.get(cls._get_key(oid))
|
return CACHE.get(cls._get_key(oid))
|
||||||
except pylibmc.Error:
|
except:
|
||||||
log("Warning: memcached error in get")
|
log("XXX CACHE Warning: error in get")
|
||||||
log(traceback.format_exc())
|
log(traceback.format_exc())
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -98,8 +97,8 @@ class ScoDocCache:
|
|||||||
status = CACHE.set(key, value, timeout=cls.timeout)
|
status = CACHE.set(key, value, timeout=cls.timeout)
|
||||||
if not status:
|
if not status:
|
||||||
log("Error: cache set failed !")
|
log("Error: cache set failed !")
|
||||||
except pylibmc.Error:
|
except:
|
||||||
log("Warning: memcached error in set")
|
log("XXX CACHE Warning: error in set !!!")
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
@ -207,12 +206,21 @@ class NotesTableCache(ScoDocCache):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, formsemestre_id, compute=True):
|
def get(cls, formsemestre_id, compute=True):
|
||||||
"""Returns NotesTable for this formsemestre
|
"""Returns NotesTable for this formsemestre
|
||||||
|
Search in local cache (g.nt_cache) or global app cache (eg REDIS)
|
||||||
If not in cache and compute is True, build it and cache it.
|
If not in cache and compute is True, build it and cache it.
|
||||||
"""
|
"""
|
||||||
|
# try local cache (same request)
|
||||||
|
if not hasattr(g, "nt_cache"):
|
||||||
|
g.nt_cache = {}
|
||||||
|
else:
|
||||||
|
if formsemestre_id in g.nt_cache:
|
||||||
|
return g.nt_cache[formsemestre_id]
|
||||||
|
# try REDIS
|
||||||
key = cls._get_key(formsemestre_id)
|
key = cls._get_key(formsemestre_id)
|
||||||
nt = CACHE.get(key)
|
nt = CACHE.get(key)
|
||||||
if nt or not compute:
|
if nt or not compute:
|
||||||
return nt
|
return nt
|
||||||
|
# Recompute asked table:
|
||||||
from app.scodoc import notes_table
|
from app.scodoc import notes_table
|
||||||
|
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
@ -220,6 +228,7 @@ class NotesTableCache(ScoDocCache):
|
|||||||
dt = time.time() - t0
|
dt = time.time() - t0
|
||||||
log("caching formsemestre_id=%s (%gs)" % (formsemestre_id, dt))
|
log("caching formsemestre_id=%s (%gs)" % (formsemestre_id, dt))
|
||||||
_ = cls.set(formsemestre_id, nt)
|
_ = cls.set(formsemestre_id, nt)
|
||||||
|
g.nt_cache[formsemestre_id] = nt
|
||||||
return nt
|
return nt
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,9 +52,12 @@ apt-get install -y python3-wheel
|
|||||||
apt-get -y install libpq-dev
|
apt-get -y install libpq-dev
|
||||||
apt-get -y install libcrack2-dev
|
apt-get -y install libcrack2-dev
|
||||||
apt-get -y install postgresql
|
apt-get -y install postgresql
|
||||||
|
apt-get -y install redis
|
||||||
apt-get -y install curl
|
apt-get -y install curl
|
||||||
apt-get -y install graphviz
|
apt-get -y install graphviz
|
||||||
|
|
||||||
|
systemctl start redis
|
||||||
|
|
||||||
# ------------ CREATION DU VIRTUALENV
|
# ------------ CREATION DU VIRTUALENV
|
||||||
echo "Creating python3 virtualenv..."
|
echo "Creating python3 virtualenv..."
|
||||||
python3 -m venv venv || die "can't create Python 3 virtualenv"
|
python3 -m venv venv || die "can't create Python 3 virtualenv"
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
# 3- Fichiers de données et config locale:
|
# 3- Fichiers de données et config locale:
|
||||||
# archives, photos: /opt/scodoc/var/ => /opt/scodoc-data
|
# archives, photos: /opt/scodoc/var/ => /opt/scodoc-data
|
||||||
#
|
#
|
||||||
# 4- TODO migrer de Apache à nginx, installer memcached, scripts service systemd
|
# 4- TODO migrer de Apache à nginx, scripts service systemd
|
||||||
#
|
#
|
||||||
|
|
||||||
source config.sh
|
source config.sh
|
||||||
|
Loading…
Reference in New Issue
Block a user