deutsch

Django (trunk) Admin vs. (c)memcached

Just ran into errors with Lighttpd 1.5, PostgreSQL, Django (trunk) Admin and using memcached for accellerating the page.

The 500er error I got when accessing /admin looked like:


File "/usr/lib/python2.4/site-packages/django/core/cache/__init__.py",
line 60, in get_cache
cache_class = getattr(__import__('django.core.cache.backends.%s' % BACKENDS[scheme], {}, {}, ['']), 'CacheClass')
File "/srv/www/www.tschitschereengreen.com/tts/django/core/cache/backends/memcached.py", line 12, in ?
raise InvalidCacheBackendError("Memcached cache backend requires either the 'memcache' or 'cmemcache' library")
InvalidCacheBackendError: Memcached cache backend requires either the 'memcache' or 'cmemcache' library

I tried several solutions, like the forums and other sources recommended (installing memcached-python bindings, install in cmemcached, etc.). The only thing which worked was replacing memcached by using the “file:///” cache. *Grml!*

This entry was posted on Saturday, March 29th, 2008 at 3:56 pm and is filed under Django. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

jerk says:

Todd asked my to post my lighttpd.com

$HTTP["host"] == "www.tschitschereengreen.de" {
var.site-root = "/srv/www/www.tschitschereengreen.de/"
accesslog.filename = var.site-root + "logs/access.log"
alias.url = (
"/site_media/" => var.site-root + "site/tts/site_media/",
"/media/" => var.site-root + "site/django/contrib/admin/media/",
"/css/" => var.site-root + "site/tts/css/",
"/images/" => var.site-root + "site/tts/site_media/images/",
)
# Django nodes
$HTTP["url"] =~ "^/(?!site_media|media|blog|css|images)" {
proxy-core.balancer = "sqf"
proxy-core.backends = (
"unix:" + var.site-root + "run/node0.sock",
# "unix:" + var.site-root + "run/node1.sock",
)
proxy-core.protocol = "scgi"
proxy-core.max-pool-size = 5
}
}

October 23rd, 2008 at 11:06 am

jerk says:

the above requires a node started like this:


#!/bin/bash
NUM_CHILDS=1
PROCESS=/srv/www/www.tschitschereengreen.de/site/tts/manage.py
PIDFILE_DIR=/srv/www/www.tschitschereengreen.de/run
SOCKET_DIR=/srv/www/www.tschitschereengreen.de/run
LOG_DIR=/srv/www/www.tschitschereengreen.de/run
MAX_REQUESTS=500
MAX_SPARE=10
MIN_SPARE=5
MAX_CHILDREN=10
METHOD=prefork
PROTOCOL=scgi
DAEMONIZE=false
WORKDIR=/srv/www/www.tschitschereengreen.de/site/tts
PYTHONPATH="/srv/www/www.tschitschereengreen.de/site:$PYTHONPATH"
USER=xxx
GROUP=xxx
start_childs()
{
for (( I=0; $I< $NUM_CHILDS; I++ )) do
echo -n "starting node $I: "
if ! child_running $I; then
PYTHONPATH=$PYTHONPATH /usr/bin/sudo -u $USER nohup ${PROCESS} runfcgi protocol=${PROTOCOL} socket=${SOCKET_DIR}/node${I}.sock method=${METHOD} maxre
quests=${MAX_REQUESTS} maxspare=${MAX_SPARE} minspare=${MIN_SPARE} maxchildren=${MAX_CHILDREN} daemonize=${DAEMONIZE} pidfile=${PIDFILE_DIR}/node${I}.pid workdir=${WORKDIR}
2>&1 >${LOG_DIR}/node${I}.log &
#PYTHONPATH=$PYTHONPATH ${PROCESS} runfcgi protocol=${PROTOCOL} socket=${SOCKET_DIR}/node${I}.sock method=${METHOD} maxrequests=${MAX_REQUESTS} maxsp
are=${MAX_SPARE} minspare=${MIN_SPARE} maxchildren=${MAX_CHILDREN} daemonize=${DAEMONIZE} pidfile=${PIDFILE_DIR}/node${I}.pid workdir=${WORKDIR} 2>&1 >${LOG_DIR}/node${I}.lo
g &
# PYTHONPATH=$PYTHONPATH /usr/bin/sudo -u $USER ${PROCESS} runfcgi protocol=${PROTOCOL} socket=${SOCKET_DIR}/node${I}.sock method=${METHOD} maxreques
ts=${MAX_REQUESTS} maxspare=${MAX_SPARE} minspare=${MIN_SPARE} maxchildren=${MAX_CHILDREN} daemonize=true pidfile=${PIDFILE_DIR}/node${I}.pid workdir=${WORKDIR} daemonize=fa
lse
[ "x$?" == "x0" ] && echo "OK" || echo "FAIL"
sleep 1s
[ -e "${SOCKET_DIR}/node${I}.sock" ] && chmod 777 "${SOCKET_DIR}/node${I}.sock"
else
echo "RUNNING"
fi
done
}

October 23rd, 2008 at 11:09 am

Leave a Reply