Closed Bug 583772 Opened 14 years ago Closed 14 years ago

Push SUMO 2.2 on Wednesday, August 4th

Categories

(Infrastructure & Operations Graveyard :: WebOps: Other, task)

All
BSDI
task
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: jsocol, Assigned: oremj)

References

Details

Filing to get on the radar. Detailed steps coming this afternoon or tomorrow.
Is there a reason we're doing this on Wednesday instead of Tuesday or Thursday?
QA wants the extra time and AMO has Thursdays buttoned up from now until the end of time. Going in parallel with AMO is too much on our web QA team.
Duration: 1.5hr.
IRC: #sumodev
Phone: 92 449#

We'll need the outage page up for around 45 minutes. There is some preliminary work that can be done ahead of time:

* Install libjpeg and libjpeg-devel packages. May already be done.
* In the git clone, create a directory /media/uploads/ on an NFS share, that's at least a+rw. (The wsgi and celery users, at least, needs to be able to write to it, and Apache to read.)

For the rest, we'll need the outage page up.

After the outage page goes up, but BEFORE ANYTHING ELSE, we should grab a copy of the master DB. We are making at least one DESTRUCTIVE CHANGE, and in the event we need to roll back, we'll need an immediately up-to-date DB.

Tim: What's the best way to handle that, with the current replication setup?

After we have the DB backed up, we can really start. Order matters here.

* git checkout 2.2
* svn switch to
  https://svn.mozilla.org/projects/sumo/tags/1.5/1.5.6_r71668_20100803

From the virtualenv:

* pip install -Ur requirements.txt
* schematic migrations/

From SVN:

(!!! This is our destructive step.)
* php scripts/collapse_duplicate_users.php
  (may take around 5 minutes)

Back on the virtualenv:
* ./manage.py migrate_questions
  (will take some time, probably 15-20 minutes)


That should migrate around 15,000 forum threads to our new platform. Then there are a few last simple steps:

* ./manage.py build_assets
* celeryd - kill it all the way dead and restart it.
* run htaccess.sh in svn webroot/
* update sphinx config and reindex.
* flush all caches.
* take the outage page down.

That should do it, SUMO 2.2.
Before ./manage.py migrate_questions, run ./manage.py update_product_details as some user who can write to /data/virtualenvs/kitsune/src/django-mozilla-product-details/product_details/json.
I can't tell when this outage is happening. If it happens anytime after around 5pm, I cannot be present for it. I can, however, tell someone how to make a backup before it begins.
Depends on: 584353
Still unassigned and unscheduled, is this going to happen this afternoon?
james - oremj is oncall and handling this. Webdev calendar shows it at 4pm still.
Tim, this is happening at 4pm today. Can you be around to make the backup?
Assignee: server-ops → jeremy.orem+bugs
Lost the output of the git checkout.

(kitsune)[root@mradm02 support.mozilla.com]# svn switch https://svn.mozilla.org/projects/sumo/tags/1.5/1.5.6_r71668_20100803/
U    webroot/lib/userslib.php
A    webroot/tiki-aaq_modal.php
D    webroot/js/webtrends.js
U    webroot/tiki-pagehistory.php
U    webroot/tiki-logout.php
U    webroot/templates/tiki-admin_forums.tpl
U    webroot/templates/tiki-pagehistory.tpl
U    webroot/templates/styles/mozkb/tiki-register.tpl
U    webroot/templates/styles/mozkb/tiki-pagehistory.tpl
U    webroot/templates/styles/mozcommon/footer.tpl
A    webroot/templates/tiki-aaq_modal.tpl
G    webroot/htaccess.dist
A    scripts/collapse_duplicate_users.php
U    scripts/sphinx/sphinx.conf
Updated to revision 71885.
OS: Other → BSDI
(kitsune)[root@mradm02 support.mozilla.com]# pip install -Ur kitsune/requirements.txt 
Obtaining django-mozilla-product-details from git+git://github.com/fwenzel/django-mozilla-product-details#egg=django-mozilla-product-details (from -r kitsune/requirements.txt (line 11))
  Cloning git://github.com/fwenzel/django-mozilla-product-details to /data/virtualenvs/kitsune/src/django-mozilla-product-details
  Running setup.py egg_info for package django-mozilla-product-details
Downloading/unpacking Babel>=0.9.4 (from -r kitsune/requirements.txt (line 17))
  Downloading Babel-0.9.5.tar.gz (1.8Mb): 1.8Mb downloaded
  Running setup.py egg_info for package Babel
Obtaining didyoumean from git+git://github.com/jsocol/didyoumean.git@cc11aeae400346fd4fc9e6334bd5ff80484839b5#egg=didyoumean (from -r kitsune/requirements.txt (line 26))
  Cloning git://github.com/jsocol/didyoumean.git (to cc11aeae400346fd4fc9e6334bd5ff80484839b5) to /data/virtualenvs/kitsune/src/didyoumean
  Running setup.py egg_info for package didyoumean
Downloading/unpacking MySQL-python==1.2.3c1 (from -r kitsune/requirements.txt (line 14))
  Downloading MySQL-python-1.2.3c1.tar.gz (89Kb): 89Kb downloaded
  Running setup.py egg_info for package MySQL-python
Downloading/unpacking Werkzeug==0.5.1 (from -r kitsune/requirements.txt (line 16))
  Downloading Werkzeug-0.5.1.zip (1.7Mb): 1.7Mb downloaded
  Running setup.py egg_info for package Werkzeug
    warning: no files found matching 'THANKS'
    warning: no files found matching 'TODO'
    no previously-included directories found matching 'docs/_build/doctrees'
Obtaining jingo from git+git://github.com/jbalogh/jingo.git@c73d2c55182301e6f3ce507fc9a17ea843fed24f#egg=jingo (from -r kitsune/requirements.txt (line 6))
  Cloning git://github.com/jbalogh/jingo.git (to c73d2c55182301e6f3ce507fc9a17ea843fed24f) to /data/virtualenvs/kitsune/src/jingo
  Could not find a tag or branch 'c73d2c55182301e6f3ce507fc9a17ea843fed24f', assuming commit.
  Running setup.py egg_info for package jingo
    no previously-included directories found matching 'examples'
Downloading/unpacking PIL==1.1.7 (from -r kitsune/requirements.txt (line 22))
  Downloading PIL-1.1.7.tar.gz (506Kb): 506Kb downloaded
  Running setup.py egg_info for package PIL
    WARNING: '' not a valid package name; please use only.-separated package names in setup.py
Downloading/unpacking phpserialize==1.2 (from -r kitsune/requirements.txt (line 18))
  Downloading phpserialize-1.2.zip
  Running setup.py egg_info for package phpserialize
Downloading/unpacking GitPython==0.1.7 (from -r kitsune/requirements.txt (line 13))
  Downloading GitPython-0.1.7.tar.gz
  Running setup.py egg_info for package GitPython
Downloading/unpacking celery==1.0.6 (from -r kitsune/requirements.txt (line 20))
  Downloading celery-1.0.6.tar.gz (1.5Mb): 1.5Mb downloaded
  Running setup.py egg_info for package celery
    no previously-included directories found matching 'tests/*.pyc'
    no previously-included directories found matching 'docs/*.pyc'
    no previously-included directories found matching 'contrib/*.pyc'
    no previously-included directories found matching 'celery/*.pyc'
    no previously-included directories found matching 'bin/*.pyc'
    no previously-included directories found matching 'docs/.build'
Downloading/unpacking django-taggit==0.8.0 (from -r kitsune/requirements.txt (line 42))
  Downloading django-taggit-0.8.0.tar.gz
  Running setup.py egg_info for package django-taggit
Downloading/unpacking Jinja2==2.2.1 (from -r kitsune/requirements.txt (line 5))
  Downloading Jinja2-2.2.1.tar.gz (771Kb): 771Kb downloaded
  Running setup.py egg_info for package Jinja2
    warning: no files found matching 'ez_setup.py'
    warning: no previously-included files matching '*' found under directory 'docs/_build/doctrees'
Obtaining schematic from git+git://github.com/jbalogh/schematic.git#egg=schematic (from -r kitsune/requirements.txt (line 9))
  Cloning git://github.com/jbalogh/schematic.git to /data/virtualenvs/kitsune/src/schematic
  Running setup.py egg_info for package schematic
Obtaining jingo-minify from git+git://github.com/jsocol/jingo-minify.git#egg=jingo-minify (from -r kitsune/requirements.txt (line 7))
  Cloning git://github.com/jsocol/jingo-minify.git to /data/virtualenvs/kitsune/src/jingo-minify
  Running setup.py egg_info for package jingo-minify
Obtaining django-authority from hg+http://bitbucket.org/danfairs/django-authority#egg=django_authority (from -r kitsune/requirements.txt (line 40))
  Cloning hg http://bitbucket.org/danfairs/django-authority to /data/virtualenvs/kitsune/src/django-authority
  Running setup.py egg_info for package django-authority
    warning: no files found matching '*.html' under directory 'docs'
    warning: no previously-included files matching '*.txt' found under directory 'docs/build'
    no previously-included directories found matching 'docs/build/html/_sources'
Obtaining hunspell from svn+http://pyhunspell.googlecode.com/svn/trunk@6#egg=hunspell-0.1-py2.6-dev_r6 (from -r kitsune/requirements.txt (line 25))
  Checking out http://pyhunspell.googlecode.com/svn/trunk (to revision 6) to /data/virtualenvs/kitsune/src/hunspell
  Running setup.py egg_info for package hunspell
Obtaining django-multidb-router from git+git://github.com/jbalogh/django-multidb-router.git@25ca0c68929144ed9020d89f2ea1e941c7f9aeca#egg=django-multidb-router (from -r kitsune/requirements.txt (line 2))
  Cloning git://github.com/jbalogh/django-multidb-router.git (to 25ca0c68929144ed9020d89f2ea1e941c7f9aeca) to /data/virtualenvs/kitsune/src/django-multidb-router
  Running setup.py egg_info for package django-multidb-router
    /usr/lib64/python2.6/distutils/dist.py:266: UserWarning: Unknown distribution option: 'test_requires'
      warnings.warn(msg)
Obtaining commonware from git+git://github.com/jsocol/commonware.git#egg=commonware (from -r kitsune/requirements.txt (line 32))
  Cloning git://github.com/jsocol/commonware.git to /data/virtualenvs/kitsune/src/commonware
  Running setup.py egg_info for package commonware
Obtaining Django from svn+http://code.djangoproject.com/svn/django/trunk@13302#egg=Django (from -r kitsune/requirements.txt (line 1))
  Checking out http://code.djangoproject.com/svn/django/trunk (to revision 13302) to /data/virtualenvs/kitsune/src/django
  Running setup.py egg_info for package Django
    warning: no files found matching '*' under directory 'examples'
Obtaining django-extensions from git+git://github.com/django-extensions/django-extensions.git#egg=django_extensions (from -r kitsune/requirements.txt (line 4))
  Cloning git://github.com/django-extensions/django-extensions.git to /data/virtualenvs/kitsune/src/django-extensions
  Running setup.py egg_info for package django-extensions
Downloading/unpacking pytz (from -r kitsune/requirements.txt (line 35))
  Downloading pytz-2010k.zip (528Kb): 528Kb downloaded
  Running setup.py egg_info for package pytz
    warning: no files found matching '*.pot' under directory 'pytz'
    warning: no previously-included files found matching 'test_zdump.py'
Obtaining bleach from git+git://github.com/jsocol/bleach.git#egg=bleach (from -r kitsune/requirements.txt (line 8))
  Cloning git://github.com/jsocol/bleach.git to /data/virtualenvs/kitsune/src/bleach
  Running setup.py egg_info for package bleach
Downloading/unpacking python-dateutil (from -r kitsune/requirements.txt (line 21))
  Downloading python-dateutil-1.5.tar.gz (232Kb): 232Kb downloaded
  Running setup.py egg_info for package python-dateutil
Obtaining django-cronjobs from git+git://github.com/jsocol/django-cronjobs.git#egg=django_cronjobs (from -r kitsune/requirements.txt (line 10))
  Cloning git://github.com/jsocol/django-cronjobs.git to /data/virtualenvs/kitsune/src/django-cronjobs
  Running setup.py egg_info for package django-cronjobs
Downloading/unpacking South==0.7 (from -r kitsune/requirements.txt (line 19))
  Downloading South-0.7.tar.gz (66Kb): 66Kb downloaded
  Running setup.py egg_info for package South
Obtaining py-wikimarkup from git+git://github.com/pcraciunoiu/py-wikimarkup.git#egg=py-wikimarkup (from -r kitsune/requirements.txt (line 38))
  Cloning git://github.com/pcraciunoiu/py-wikimarkup.git to /data/virtualenvs/kitsune/src/py-wikimarkup
  Running setup.py egg_info for package py-wikimarkup
    warning: no previously-included files matching '*~' found anywhere in distribution
Downloading/unpacking python-memcached==1.45 (from -r kitsune/requirements.txt (line 15))
  Downloading python-memcached-1.45.tar.gz
  Running setup.py egg_info for package python-memcached
Obtaining django-cache-machine from git+git://github.com/jbalogh/django-cache-machine.git#egg=django-cache-machine (from -r kitsune/requirements.txt (line 3))
  Cloning git://github.com/jbalogh/django-cache-machine.git to /data/virtualenvs/kitsune/src/django-cache-machine
  Running setup.py egg_info for package django-cache-machine
    no previously-included directories found matching 'examples'
Obtaining tower from git+git://github.com/clouserw/tower.git#egg=tower (from -r kitsune/requirements.txt (line 29))
  Cloning git://github.com/clouserw/tower.git to /data/virtualenvs/kitsune/src/tower
  Running setup.py egg_info for package tower
    no previously-included directories found matching 'examples'
Downloading/unpacking anyjson (from celery==1.0.6->-r kitsune/requirements.txt (line 20))
  Downloading anyjson-0.2.4.tar.gz
  Running setup.py egg_info for package anyjson
Downloading/unpacking carrot>=0.10.4 (from celery==1.0.6->-r kitsune/requirements.txt (line 20))
  Downloading carrot-0.10.5.tar.gz (60Kb): 60Kb downloaded
  Running setup.py egg_info for package carrot
Downloading/unpacking django-picklefield (from celery==1.0.6->-r kitsune/requirements.txt (line 20))
  Downloading django-picklefield-0.1.6.tar.gz
  Running setup.py egg_info for package django-picklefield
Downloading/unpacking billiard>=0.3.1 (from celery==1.0.6->-r kitsune/requirements.txt (line 20))
  Downloading billiard-0.3.1.tar.gz
  Running setup.py egg_info for package billiard
    warning: no files found matching '*' under directory 'tests'
Downloading/unpacking html5lib (from bleach->-r kitsune/requirements.txt (line 8))
  Downloading html5lib-0.90.zip (99Kb): 99Kb downloaded
  Running setup.py egg_info for package html5lib
Downloading/unpacking amqplib>=0.6 (from carrot>=0.10.4->celery==1.0.6->-r kitsune/requirements.txt (line 20))
  Downloading amqplib-0.6.1.tgz (53Kb): 53Kb downloaded
  Running setup.py egg_info for package amqplib
Installing collected packages: amqplib, anyjson, Babel, billiard, bleach, carrot, celery, commonware, didyoumean, Django, django-authority, django-cache-machine, django-cronjobs, django-extensions, django-mozilla-product-details, django-multidb-router, django-picklefield, django-taggit, GitPython, html5lib, hunspell, jingo, jingo-minify, Jinja2, MySQL-python, phpserialize, PIL, py-wikimarkup, python-dateutil, python-memcached, pytz, schematic, South, tower, Werkzeug
  Found existing installation: amqplib 0.6.1
    Not uninstalling amqplib at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for amqplib
  Found existing installation: anyjson 0.2.4
    Not uninstalling anyjson at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for anyjson
  Found existing installation: Babel 0.9.5
    Not uninstalling Babel at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for Babel
    Installing pybabel script to /data/virtualenvs/kitsune/bin
  Found existing installation: billiard 0.3.1
    Not uninstalling billiard at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for billiard
    warning: no files found matching '*' under directory 'tests'
  Running setup.py develop for bleach
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/bleach.egg-link (link to .)
    Adding bleach 0.3.3 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/bleach
  Found existing installation: carrot 0.10.5
    Not uninstalling carrot at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for carrot
  Found existing installation: celery 1.0.5
    Not uninstalling celery at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for celery
    changing mode of build/scripts-2.6/celeryd from 644 to 755
    changing mode of build/scripts-2.6/celeryinit from 644 to 755
    changing mode of build/scripts-2.6/celerybeat from 644 to 755
    changing mode of build/scripts-2.6/camqadm from 644 to 755
    no previously-included directories found matching 'tests/*.pyc'
    no previously-included directories found matching 'docs/*.pyc'
    no previously-included directories found matching 'contrib/*.pyc'
    no previously-included directories found matching 'celery/*.pyc'
    no previously-included directories found matching 'bin/*.pyc'
    no previously-included directories found matching 'docs/.build'
    changing mode of /data/virtualenvs/kitsune/bin/celeryinit to 755
    changing mode of /data/virtualenvs/kitsune/bin/celeryd to 755
    changing mode of /data/virtualenvs/kitsune/bin/celerybeat to 755
    changing mode of /data/virtualenvs/kitsune/bin/camqadm to 755
    Installing celeryd script to /data/virtualenvs/kitsune/bin
    Installing celeryinit script to /data/virtualenvs/kitsune/bin
    Installing celerybeat script to /data/virtualenvs/kitsune/bin
    Installing camqadm script to /data/virtualenvs/kitsune/bin
  Running setup.py develop for commonware
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/commonware.egg-link (link to .)
    Adding commonware 0.2.1 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/commonware
  Running setup.py develop for didyoumean
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/didyoumean.egg-link (link to .)
    Adding didyoumean 0.1.1 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/didyoumean
  Running setup.py develop for Django
    warning: no files found matching '*' under directory 'examples'
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/Django.egg-link (link to .)
    Adding Django 1.2.1 to easy-install.pth file
    Installing django-admin.py script to /data/virtualenvs/kitsune/bin
    
    Installed /data/virtualenvs/kitsune/src/django
  Running setup.py develop for django-authority
    warning: no files found matching '*.html' under directory 'docs'
    warning: no previously-included files matching '*.txt' found under directory 'docs/build'
    no previously-included directories found matching 'docs/build/html/_sources'
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-authority.egg-link (link to .)
    Adding django-authority 0.4 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-authority
  Running setup.py develop for django-cache-machine
    no previously-included directories found matching 'examples'
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-cache-machine.egg-link (link to .)
    Adding django-cache-machine 0.4 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-cache-machine
  Running setup.py develop for django-cronjobs
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-cronjobs.egg-link (link to .)
    Adding django-cronjobs 0.1 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-cronjobs
  Running setup.py develop for django-extensions
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-extensions.egg-link (link to .)
    Adding django-extensions 0.5 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-extensions
  Running setup.py develop for django-mozilla-product-details
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-mozilla-product-details.egg-link (link to .)
    Adding django-mozilla-product-details 0.3 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-mozilla-product-details
  Running setup.py develop for django-multidb-router
    /usr/lib64/python2.6/distutils/dist.py:266: UserWarning: Unknown distribution option: 'test_requires'
      warnings.warn(msg)
    Creating /data/virtualenvs/kitsune/lib/python2.6/site-packages/django-multidb-router.egg-link (link to .)
    Adding django-multidb-router 0.3 to easy-install.pth file
    
    Installed /data/virtualenvs/kitsune/src/django-multidb-router
  Found existing installation: django-picklefield 0.1.6
    Not uninstalling django-picklefield at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for django-picklefield
  Running setup.py install for django-taggit
  Found existing installation: GitPython 0.1.7
    Not uninstalling GitPython at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for GitPython
  Found existing installation: html5lib 0.90
    Not uninstalling html5lib at /usr/lib/python2.6/site-packages, outside environment /data/virtualenvs/kitsune
  Running setup.py install for html5lib
  Running setup.py develop for hunspell
    building 'hunspell' extension
    gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -D_LINUX -I/usr/include/hunspell -I/usr/include/python2.6 -c hunspell.c -o build/temp.linux-x86_64-2.6/hunspell.o -Wall
    hunspell.c:21:22: error: hunspell.h: No such file or directory
    hunspell.c:31: error: expected specifier-qualifier-list before ‘Hunhandle’
    hunspell.c: In function ‘HunSpell_init’:
    hunspell.c:43: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c:43: warning: implicit declaration of function ‘Hunspell_create’
    hunspell.c: In function ‘HunSpell_dealloc’:
    hunspell.c:50: warning: implicit declaration of function ‘Hunspell_destroy’
    hunspell.c:50: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_get_dic_encoding’:
    hunspell.c:57: warning: implicit declaration of function ‘Hunspell_get_dic_encoding’
    hunspell.c:57: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_spell’:
    hunspell.c:68: warning: implicit declaration of function ‘Hunspell_spell’
    hunspell.c:68: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_suggest’:
    hunspell.c:85: warning: implicit declaration of function ‘Hunspell_suggest’
    hunspell.c:85: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c:91: warning: implicit declaration of function ‘Hunspell_free_list’
    hunspell.c:91: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_analyze’:
    hunspell.c:106: warning: implicit declaration of function ‘Hunspell_analyze’
    hunspell.c:106: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c:112: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_stem’:
    hunspell.c:127: warning: implicit declaration of function ‘Hunspell_stem’
    hunspell.c:127: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c:133: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_generate’:
    hunspell.c:148: warning: implicit declaration of function ‘Hunspell_generate’
    hunspell.c:148: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c:154: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_add’:
    hunspell.c:166: warning: implicit declaration of function ‘Hunspell_add’
    hunspell.c:166: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_add_with_affix’:
    hunspell.c:179: warning: implicit declaration of function ‘Hunspell_add_with_affix’
    hunspell.c:179: error: ‘HunSpell’ has no member named ‘handle’
    hunspell.c: In function ‘HunSpell_remove’:
    hunspell.c:192: warning: implicit declaration of function ‘Hunspell_remove’
    hunspell.c:192: error: ‘HunSpell’ has no member named ‘handle’
    error: command 'gcc' failed with exit status 1
    Complete output from command /data/virtualenvs/kitsune/bin/python26 -c "import setuptools; __file__='/data/virtualenvs/kitsune/src/hunspell/setup.py'; execfile('/data/virtualenvs/kitsune/src/hunspell/setup.py')" develop --no-deps:
    running develop

running egg_info

writing hunspell.egg-info/PKG-INFO

writing top-level names to hunspell.egg-info/top_level.txt

writing dependency_links to hunspell.egg-info/dependency_links.txt

warning: manifest_maker: standard file '-c' not found

writing manifest file 'hunspell.egg-info/SOURCES.txt'

running build_ext

building 'hunspell' extension

creating build

creating build/temp.linux-x86_64-2.6

gcc -pthread -fno-strict-aliasing -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fPIC -D_LINUX -I/usr/include/hunspell -I/usr/include/python2.6 -c hunspell.c -o build/temp.linux-x86_64-2.6/hunspell.o -Wall

hunspell.c:21:22: error: hunspell.h: No such file or directory

hunspell.c:31: error: expected specifier-qualifier-list before ‘Hunhandle’

hunspell.c: In function ‘HunSpell_init’:

hunspell.c:43: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c:43: warning: implicit declaration of function ‘Hunspell_create’

hunspell.c: In function ‘HunSpell_dealloc’:

hunspell.c:50: warning: implicit declaration of function ‘Hunspell_destroy’

hunspell.c:50: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_get_dic_encoding’:

hunspell.c:57: warning: implicit declaration of function ‘Hunspell_get_dic_encoding’

hunspell.c:57: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_spell’:

hunspell.c:68: warning: implicit declaration of function ‘Hunspell_spell’

hunspell.c:68: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_suggest’:

hunspell.c:85: warning: implicit declaration of function ‘Hunspell_suggest’

hunspell.c:85: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c:91: warning: implicit declaration of function ‘Hunspell_free_list’

hunspell.c:91: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_analyze’:

hunspell.c:106: warning: implicit declaration of function ‘Hunspell_analyze’

hunspell.c:106: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c:112: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_stem’:

hunspell.c:127: warning: implicit declaration of function ‘Hunspell_stem’

hunspell.c:127: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c:133: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_generate’:

hunspell.c:148: warning: implicit declaration of function ‘Hunspell_generate’

hunspell.c:148: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c:154: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_add’:

hunspell.c:166: warning: implicit declaration of function ‘Hunspell_add’

hunspell.c:166: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_add_with_affix’:

hunspell.c:179: warning: implicit declaration of function ‘Hunspell_add_with_affix’

hunspell.c:179: error: ‘HunSpell’ has no member named ‘handle’

hunspell.c: In function ‘HunSpell_remove’:

hunspell.c:192: warning: implicit declaration of function ‘Hunspell_remove’

hunspell.c:192: error: ‘HunSpell’ has no member named ‘handle’

error: command 'gcc' failed with exit status 1

----------------------------------------
Command /data/virtualenvs/kitsune/bin/python26 -c "import setuptools; __file__='/data/virtualenvs/kitsune/src/hunspell/setup.py'; execfile('/data/virtualenvs/kitsune/src/hunspell/setup.py')" develop --no-deps failed with error code 1
Storing complete log in ./pip-log.txt
(kitsune)[root@mradm02 kitsune]# schematic migrations/
Running migration 10:
BEGIN;

-- The eventwatch type is made here due to an historical deployment contingency:
INSERT INTO django_content_type (name, app_label, model) VALUES ('event watch', 'notifications', 'eventwatch');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add event watch', @ct, 'add_eventwatch'),
                                                                     ('Can change event watch', @ct, 'change_eventwatch'),
                                                                     ('Can delete event watch', @ct, 'delete_eventwatch');

CREATE TABLE `questions_questionforum` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(50) NOT NULL UNIQUE,
    `slug` varchar(50) NOT NULL UNIQUE
) ENGINE=InnoDB CHARSET=utf8
;
CREATE TABLE `questions_question` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `title` varchar(255) NOT NULL,
    `forum_id` integer NOT NULL,
    `creator_id` integer NOT NULL,
    `content` longtext NOT NULL,
    `created` datetime NOT NULL,
    `updated` datetime,
    `updated_by_id` integer,
    `last_answer_id` integer,
    `num_answers` integer NOT NULL,
    `status` integer NOT NULL,
    `is_locked` bool NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `questions_question` ADD CONSTRAINT `creator_id_refs_id_723e3a28` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `questions_question` ADD CONSTRAINT `updated_by_id_refs_id_723e3a28` FOREIGN KEY (`updated_by_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `questions_question` ADD CONSTRAINT `forum_id_refs_id_334b13f3` FOREIGN KEY (`forum_id`) REFERENCES `questions_questionforum` (`id`);
CREATE TABLE `questions_questionmetadata` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question_id` integer NOT NULL,
    `name` varchar(50) NOT NULL,
    `value` longtext NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `questions_questionmetadata` ADD CONSTRAINT `question_id_refs_id_199b1870` FOREIGN KEY (`question_id`) REFERENCES `questions_question` (`id`);
CREATE TABLE `questions_answer` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question_id` integer NOT NULL,
    `creator_id` integer NOT NULL,
    `created` datetime NOT NULL,
    `content` longtext NOT NULL,
    `updated` datetime,
    `updated_by_id` integer,
    `upvotes` integer NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `questions_answer` ADD CONSTRAINT `creator_id_refs_id_30a2e948` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `questions_answer` ADD CONSTRAINT `updated_by_id_refs_id_30a2e948` FOREIGN KEY (`updated_by_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `questions_answer` ADD CONSTRAINT `question_id_refs_id_5dadc1b3` FOREIGN KEY (`question_id`) REFERENCES `questions_question` (`id`);
ALTER TABLE `questions_question` ADD CONSTRAINT `last_answer_id_refs_id_6a0465b3` FOREIGN KEY (`last_answer_id`) REFERENCES `questions_answer` (`id`);
CREATE INDEX `questions_question_forum_id` ON `questions_question` (`forum_id`);
CREATE INDEX `questions_question_creator_id` ON `questions_question` (`creator_id`);
CREATE INDEX `questions_question_created` ON `questions_question` (`created`);
CREATE INDEX `questions_question_updated` ON `questions_question` (`updated`);
CREATE INDEX `questions_question_updated_by_id` ON `questions_question` (`updated_by_id`);
CREATE INDEX `questions_question_last_answer_id` ON `questions_question` (`last_answer_id`);
CREATE INDEX `questions_question_num_answers` ON `questions_question` (`num_answers`);
CREATE INDEX `questions_question_status` ON `questions_question` (`status`);
CREATE INDEX `questions_questionmetadata_question_id` ON `questions_questionmetadata` (`question_id`);
CREATE INDEX `questions_questionmetadata_name` ON `questions_questionmetadata` (`name`);
CREATE INDEX `questions_answer_question_id` ON `questions_answer` (`question_id`);
CREATE INDEX `questions_answer_creator_id` ON `questions_answer` (`creator_id`);
CREATE INDEX `questions_answer_created` ON `questions_answer` (`created`);
CREATE INDEX `questions_answer_updated` ON `questions_answer` (`updated`);
CREATE INDEX `questions_answer_updated_by_id` ON `questions_answer` (`updated_by_id`);
CREATE INDEX `questions_answer_upvotes` ON `questions_answer` (`upvotes`);

INSERT INTO django_content_type (name, app_label, model) VALUES ('question', 'questions', 'question');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add question', @ct, 'add_question'),
                                                                     ('Can change question', @ct, 'change_question'),
                                                                     ('Can delete question', @ct, 'delete_question');

INSERT INTO django_content_type (name, app_label, model) VALUES ('question meta data', 'questions', 'questionmetadata');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add question meta data', @ct, 'add_questionmetadata'),
                                                                     ('Can change question meta data', @ct, 'change_questionmetadata'),
                                                                     ('Can delete question meta data', @ct, 'delete_questionmetadata');

INSERT INTO django_content_type (name, app_label, model) VALUES ('answer', 'questions', 'answer');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add answer', @ct, 'add_answer'),
                                                                     ('Can change answer', @ct, 'change_answer'),
                                                                     ('Can delete answer', @ct, 'delete_answer');
COMMIT;

That took 0.51 seconds
################################################## 

Running migration 11:
ALTER TABLE questions_question DROP FOREIGN KEY forum_id_refs_id_334b13f3;
ALTER TABLE questions_question DROP forum_id;
DROP TABLE questions_questionforum;
That took 0.07 seconds
################################################## 

Running migration 12:
ALTER TABLE `questions_question` ADD `solution_id` integer;
ALTER TABLE `questions_question` ADD CONSTRAINT `solution_id_refs_id_95fb9a4d` FOREIGN KEY (`solution_id`) REFERENCES `questions_answer` (`id`);

That took 0.12 seconds
################################################## 

Running migration 13:
-- Application: notifications
-- Model: EventWatch
ALTER TABLE `notifications_eventwatch`
	ADD `hash` varchar(40);
CREATE INDEX `hash` ON `notifications_eventwatch` (`hash`);

That took 0.09 seconds
################################################## 

Running migration 14:
CREATE TABLE `questions_questionvote` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `question_id` integer NOT NULL,
    `created` datetime NOT NULL,
    `creator_id` integer,
    `anonymous_id` varchar(40) NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `questions_questionvote` ADD CONSTRAINT `question_id_refs_id_9dde00db` FOREIGN KEY (`question_id`) REFERENCES `questions_question` (`id`);
ALTER TABLE `questions_questionvote` ADD CONSTRAINT `creator_id_refs_id_699edd80` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
CREATE INDEX `questions_questionvote_question_id` ON `questions_questionvote` (`question_id`);
CREATE INDEX `questions_questionvote_created` ON `questions_questionvote` (`created`);
CREATE INDEX `questions_questionvote_creator_id` ON `questions_questionvote` (`creator_id`);
CREATE INDEX `questions_questionvote_anonymous_id` ON `questions_questionvote` (`anonymous_id`);

INSERT INTO django_content_type (name, app_label, model) VALUES ('question vote', 'questions', 'questionvote');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add question vote', @ct, 'add_questionvote'),
                                                                     ('Can change question vote', @ct, 'change_questionvote'),
                                                                     ('Can delete question vote', @ct, 'delete_questionvote');

That took 0.11 seconds
################################################## 

Running migration 15:
CREATE TABLE `questions_answervote` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `answer_id` integer NOT NULL,
    `helpful` bool NOT NULL,
    `created` datetime NOT NULL,
    `creator_id` integer,
    `anonymous_id` varchar(40) NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `questions_answervote` ADD CONSTRAINT `answer_id_refs_id_112ad03b` FOREIGN KEY (`answer_id`) REFERENCES `questions_answer` (`id`);
ALTER TABLE `questions_answervote` ADD CONSTRAINT `creator_id_refs_id_73284cb0` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
CREATE INDEX `questions_answervote_answer_id` ON `questions_answervote` (`answer_id`);
CREATE INDEX `questions_answervote_created` ON `questions_answervote` (`created`);
CREATE INDEX `questions_answervote_creator_id` ON `questions_answervote` (`creator_id`);
CREATE INDEX `questions_answervote_anonymous_id` ON `questions_answervote` (`anonymous_id`);

INSERT INTO django_content_type (name, app_label, model) VALUES ('answer vote', 'questions', 'answervote');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add answer vote', @ct, 'add_answervote'),
                                                                     ('Can change answer vote', @ct, 'change_answervote'),
                                                                     ('Can delete answer vote', @ct, 'delete_answervote');

That took 0.12 seconds
################################################## 

Running migration 16:
ALTER TABLE `questions_question`
    ADD `num_votes_past_week` integer UNSIGNED DEFAULT 0;
CREATE INDEX `questions_question_num_votes_past_week_idx`
    ON `questions_question` (`num_votes_past_week`);

That took 0.08 seconds
################################################## 

Running migration 17:
-- django-taggit stuff: --

CREATE TABLE `taggit_tag` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(100) NOT NULL UNIQUE,
    `slug` varchar(100) NOT NULL UNIQUE
) ENGINE=InnoDB CHARSET=utf8
;
CREATE TABLE `taggit_taggeditem` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `tag_id` integer NOT NULL,
    `object_id` integer NOT NULL,
    `content_type_id` integer NOT NULL
) ENGINE=InnoDB CHARSET=utf8
;
ALTER TABLE `taggit_taggeditem` ADD CONSTRAINT `tag_id_refs_id_c87e3f85` FOREIGN KEY (`tag_id`) REFERENCES `taggit_tag` (`id`);
ALTER TABLE `taggit_taggeditem` ADD CONSTRAINT `content_type_id_refs_id_5a2b7711` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);
CREATE INDEX `taggit_taggeditem_3747b463` ON `taggit_taggeditem` (`tag_id`);
CREATE INDEX `taggit_taggeditem_e4470c6e` ON `taggit_taggeditem` (`content_type_id`);

-- Added a unique constraint on taggit_tag.name. This keeps tag names case-insensitively unique, since we use MySQL's default collation for utf8, utf8_general_ci.


insert into auth_permission (name, content_type_id, codename) values ('Can add tags to and remove tags from questions', (select id from django_content_type where app_label='questions' and model='question'), 'tag_question');

INSERT INTO django_content_type (name, app_label, model) VALUES ('Tag', 'taggit', 'tag');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add tag', @ct, 'add_tag'),
                                                                     ('Can change tag', @ct, 'change_tag'),
                                                                     ('Can delete tag', @ct, 'delete_tag');

INSERT INTO django_content_type (name, app_label, model) VALUES ('Tagged Item', 'taggit', 'taggeditem');
SET @ct = (SELECT LAST_INSERT_ID());
INSERT INTO auth_permission (name, content_type_id, codename) VALUES ('Can add tagged item', @ct, 'add_taggeditem'),
                                                                     ('Can change tagged item', @ct, 'change_taggeditem'),
                                                                     ('Can delete tagged item', @ct, 'delete_taggeditem');

That took 0.08 seconds
################################################## 

Running migration 18:
INSERT INTO auth_permission (name, content_type_id, codename)
    VALUES ('Can lock question',
            (select id from django_content_type where app_label='questions' and model='question'),
            'lock_question');

That took 0.09 seconds
################################################## 

Running migration 19:
CREATE TABLE `flagit_flaggedobject` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `content_type_id` integer NOT NULL,
    `object_id` integer UNSIGNED NOT NULL,
    `status` integer NOT NULL,
    `reason` varchar(64) NOT NULL,
    `notes` longtext NOT NULL,
    `creator_id` integer NOT NULL,
    `created` datetime NOT NULL,
    `handled` datetime NOT NULL,
    `handled_by_id` integer,
    UNIQUE (`content_type_id`, `object_id`, `creator_id`)
)
;
ALTER TABLE `flagit_flaggedobject` ADD CONSTRAINT `content_type_id_refs_id_6f4cf8f9` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);
ALTER TABLE `flagit_flaggedobject` ADD CONSTRAINT `creator_id_refs_id_402bce45` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `flagit_flaggedobject` ADD CONSTRAINT `handled_by_id_refs_id_402bce45` FOREIGN KEY (`handled_by_id`) REFERENCES `auth_user` (`id`);
CREATE INDEX `flagit_flaggedobject_e4470c6e` ON `flagit_flaggedobject` (`content_type_id`);
CREATE INDEX `flagit_flaggedobject_c9ad71dd` ON `flagit_flaggedobject` (`status`);
CREATE INDEX `flagit_flaggedobject_f97a5119` ON `flagit_flaggedobject` (`creator_id`);
CREATE INDEX `flagit_flaggedobject_3216ff68` ON `flagit_flaggedobject` (`created`);
CREATE INDEX `flagit_flaggedobject_a8d7f3ae` ON `flagit_flaggedobject` (`handled`);
CREATE INDEX `flagit_flaggedobject_c77d7f80` ON `flagit_flaggedobject` (`handled_by_id`);

That took 0.05 seconds
################################################## 

Running migration 20:
CREATE UNIQUE INDEX `questions_questionmetadata_question_and_name_idx`
    ON `questions_questionmetadata` (`question_id`, `name`);

That took 0.02 seconds
################################################## 

Running migration 21:
ALTER TABLE `notifications_eventwatch`
        ADD `event_type` varchar(20);
CREATE INDEX `notifications_eventwatch_event_type_idx`
        ON `notifications_eventwatch` (`event_type`);
ALTER TABLE notifications_eventwatch
        DROP KEY content_type_id;
ALTER TABLE notifications_eventwatch
        ADD UNIQUE (`content_type_id`,`watch_id`,`email`, `event_type`);
UPDATE notifications_eventwatch
        SET event_type = 'reply';

That took 0.09 seconds
################################################## 

Running migration 22:
BEGIN;
-- Application: upload
-- Model: ImageAttachment
CREATE TABLE `upload_imageattachment` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `file` varchar(100) NOT NULL,
    `thumbnail` varchar(100) NOT NULL,
    `creator_id` integer NOT NULL,
    `content_type_id` integer NOT NULL,
    `object_id` integer UNSIGNED NOT NULL
)
;
ALTER TABLE `upload_imageattachment` ADD CONSTRAINT `creator_id_refs_id_c6b152a0` FOREIGN KEY (`creator_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `upload_imageattachment` ADD CONSTRAINT `content_type_id_refs_id_e616c0dc` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`);
CREATE INDEX `upload_imageattachment_f97a5119` ON `upload_imageattachment` (`creator_id`);
CREATE INDEX `upload_imageattachment_e4470c6e` ON `upload_imageattachment` (`content_type_id`);
COMMIT;

That took 0.07 seconds
################################################## 

Running migration 23:
ALTER TABLE `questions_question` ADD `confirmation_id` varchar(40) NOT NULL;
CREATE INDEX `questions_question_confirmation_id` ON `questions_question` (`confirmation_id`);

UPDATE questions_question SET status = 1;

That took 0.04 seconds
################################################## 

Running migration 24:
INSERT INTO taggit_tag (name, slug) VALUES ('Windows 3.11', 'windows-311') ON DUPLICATE KEY UPDATE name='Windows 3.11', slug='windows-311';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows 95', 'windows-95') ON DUPLICATE KEY UPDATE name='Windows 95', slug='windows-95';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows 98', 'windows-98') ON DUPLICATE KEY UPDATE name='Windows 98', slug='windows-98';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows 2000', 'windows-2000') ON DUPLICATE KEY UPDATE name='Windows 2000', slug='windows-2000';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows XP', 'windows-xp') ON DUPLICATE KEY UPDATE name='Windows XP', slug='windows-xp';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows Server 2003', 'windows-server-2003') ON DUPLICATE KEY UPDATE name='Windows Server 2003', slug='windows-server-2003';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows Vista', 'windows-vista') ON DUPLICATE KEY UPDATE name='Windows Vista', slug='windows-vista';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows 7', 'windows-7') ON DUPLICATE KEY UPDATE name='Windows 7', slug='windows-7';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows NT 4.0', 'windows-nt-40') ON DUPLICATE KEY UPDATE name='Windows NT 4.0', slug='windows-nt-40';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows ME', 'windows-me') ON DUPLICATE KEY UPDATE name='Windows ME', slug='windows-me';
INSERT INTO taggit_tag (name, slug) VALUES ('Windows', 'windows') ON DUPLICATE KEY UPDATE name='Windows', slug='windows';
INSERT INTO taggit_tag (name, slug) VALUES ('OpenBSD', 'openbsd') ON DUPLICATE KEY UPDATE name='OpenBSD', slug='openbsd';
INSERT INTO taggit_tag (name, slug) VALUES ('SunOS', 'sunos') ON DUPLICATE KEY UPDATE name='SunOS', slug='sunos';
INSERT INTO taggit_tag (name, slug) VALUES ('Linux', 'linux') ON DUPLICATE KEY UPDATE name='Linux', slug='linux';
INSERT INTO taggit_tag (name, slug) VALUES ('Mac OS X 10.4', 'mac-os-x-104') ON DUPLICATE KEY UPDATE name='Mac OS X 10.4', slug='mac-os-x-104';
INSERT INTO taggit_tag (name, slug) VALUES ('Mac OS X 10.5', 'mac-os-x-105') ON DUPLICATE KEY UPDATE name='Mac OS X 10.5', slug='mac-os-x-105';
INSERT INTO taggit_tag (name, slug) VALUES ('Mac OS X 10.6', 'mac-os-x-106') ON DUPLICATE KEY UPDATE name='Mac OS X 10.6', slug='mac-os-x-106';
INSERT INTO taggit_tag (name, slug) VALUES ('Mac OS', 'mac-os') ON DUPLICATE KEY UPDATE name='Mac OS', slug='mac-os';
INSERT INTO taggit_tag (name, slug) VALUES ('QNX', 'qnx') ON DUPLICATE KEY UPDATE name='QNX', slug='qnx';
INSERT INTO taggit_tag (name, slug) VALUES ('BeOS', 'beos') ON DUPLICATE KEY UPDATE name='BeOS', slug='beos';
INSERT INTO taggit_tag (name, slug) VALUES ('OS/2', 'os2') ON DUPLICATE KEY UPDATE name='OS/2', slug='os2';

That took 0.04 seconds
################################################## 

Running migration 25:
-- Django cannot do composite primary keys, so we're adding and id column
-- to this table.

ALTER TABLE tiki_comments_metadata DROP PRIMARY KEY;

CREATE UNIQUE INDEX
    threadId_name
ON
    tiki_comments_metadata(threadId, name);

ALTER TABLE
    tiki_comments_metadata
ADD
    id INT NOT NULL AUTO_INCREMENT KEY;


-- Rename FakeUser to something more friendly
UPDATE
    users_users
SET
    login = 'AnonymousUser'
WHERE
    login = 'FakeUser';


UPDATE
    auth_user
SET
    username = 'AnonymousUser'
WHERE
    username = 'FakeUser';

That took 20.42 seconds
##################################################
We're currently live with two minor issues that can wait until morning:

PIL, libjpeg and celery seem to be at odds again. Old processes? Getting these errors:

Task upload.tasks.generate_thumbnail with id f85692b8-7086-4bca-8199-5d4b6b32de77 raised exception: IOError('decoder jpeg not available',)

There was a missing semicolon in some JS. It should have been caught on staging but we aren't running with minify on over there. Filed bug 584600 to correct that.

We'll work out the former in the morning. The latter was temporarily fixed but turning on TEMPLATE_DEBUG to use the non-minified scripts, and a patch has been r+d already.
Oh, and Related Questions are currently disabled because the taggit queries were running for upwards of 10 minutes trying to figure them out.
This push is done. We're spinning up a very quick 2.2.1 for next week.
Status: NEW → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
Status: RESOLVED → VERIFIED
Component: Server Operations: Web Operations → WebOps: Other
Product: mozilla.org → Infrastructure & Operations
Product: Infrastructure & Operations → Infrastructure & Operations Graveyard
You need to log in before you can comment on or make changes to this bug.