diff --git a/README b/README index e4cc134e..36c26292 100644 --- a/README +++ b/README @@ -41,19 +41,38 @@ create / update static files ./manage.py update_static ./manage.py compile_pyc + * Database We use postgresql but other databases might also work (make sure you have the python bindings installed). - create a postgresql database and adjust settings in local_settings.py - and run ./manage.py syncdb to populate the database. + create a postgresql database - createdb -T template0 --locale=C --encoding=UTF8 -O pandora pandora + sudo -u postgres createdb -T template0 --locale=C --encoding=UTF8 -O pandora pandora (setting locale to C is required to fix a bug in sort if set to UTF8) + now add settings to local_settings.py: + DATABASES = { + 'default': { + 'NAME': 'pandora', + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'USER': 'pandora', + } + } + + and run ./manage.py syncdb to populate the database. + + Optionaly use pg_trgm to improve find speed (requires postgres 9.1 and postgresql-contrib) + + echo "CREATE EXTENSION pg_trgm;" | sudo -u postgres psql pandora + ./manage.py sqlfindindex | ./manage.py dbshell + echo "DB_GIN_TRGM = True" >> local_settings.py + + * RabbitMQ - For background tasks we use RabbitMQ, to install rabbitmq: + For background tasks RabbitMQ is required, to install rabbitmq: + sudo apt-get install rabbitmq-server and create permissions according to BROKER_* in local_settings.py i.e.: @@ -62,10 +81,12 @@ create / update static files sudo rabbitmqctl add_vhost /pandora sudo rabbitmqctl set_permissions -p /pandora pandora ".*" ".*" ".*" + * H264 - to support h264 videos, install ffmpeg with x264 enabled, - install qt-faststart from (ffmpeg/tools) - to enable add "mp4" to video.formats in your config.jsonc + for h264 videos, you need to compile ffmpeg with x264 and libfaac enabled, + you also need to install qt-faststart (from ffmpeg/tools) + to enable h264 derivatives add "mp4" to video.formats in your config.jsonc + == Deployment == * Install upstart scripts @@ -104,3 +125,7 @@ to apply them. === Development === in one terminal: ./manage.py runserver + + and background task in another: + ./manage.py celeryd -B -Q default,encoding + diff --git a/pandora/clip/models.py b/pandora/clip/models.py index 1b00bc2c..74c1c7a7 100644 --- a/pandora/clip/models.py +++ b/pandora/clip/models.py @@ -132,7 +132,6 @@ attrs = { 'volume': models.FloatField(default=0, null=True, db_index=True), 'sortvalue': models.CharField(max_length=1000, null=True, db_index=True), - #run this CREATE INDEX clip_clip_findvalue_idx ON clip_clip USING gin (findvalue gin_trgm_ops); 'findvalue': models.TextField(null=True, db_index=settings.DB_GIN_TRGM), } for name in settings.CONFIG['clipLayers']: diff --git a/pandora/item/management/commands/sqlfindindex.py b/pandora/item/management/commands/sqlfindindex.py new file mode 100644 index 00000000..4b30c61d --- /dev/null +++ b/pandora/item/management/commands/sqlfindindex.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# vi:si:et:sw=4:sts=4:ts=4 + +from django.core.management.base import BaseCommand +from django.conf import settings + +import monkey_patch.models +from ... import models + + +class Command(BaseCommand): + """ + print sql statement to add trigram + """ + help = 'sql create statements for find tables to use trigram index' + args = '' + + def handle(self, **options): + print 'CREATE INDEX item_itemfind_value_idx ON item_itemfind USING gin (value gin_trgm_ops);' + print '' + print 'CREATE INDEX clip_clip_findvalue_idx ON clip_clip USING gin (findvalue gin_trgm_ops);' diff --git a/pandora/item/models.py b/pandora/item/models.py index e5b6b05f..f9c04819 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -1297,7 +1297,6 @@ class ItemFind(models.Model): item = models.ForeignKey('Item', related_name='find', db_index=True) key = models.CharField(max_length=200, db_index=True) - #CREATE INDEX item_itemfind_value_idx ON item_itemfind USING gin (value gin_trgm_ops); value = models.TextField(blank=True, db_index=settings.DB_GIN_TRGM) def __unicode__(self): diff --git a/vm/firstboot.sh b/vm/firstboot.sh index 0bbb0adb..720f7383 100755 --- a/vm/firstboot.sh +++ b/vm/firstboot.sh @@ -1,6 +1,6 @@ #!/bin/sh #fails in bootstrap -apt-get -y install ipython +apt-get -y install ipython ntp #ffmpeg wget http://firefogg.org/nightly/ffmpeg.linux -O /usr/local/bin/ffmpeg @@ -13,6 +13,7 @@ chmod 755 /usr/local/bin/ffmpeg2theora apt-get -y install postgresql postgresql-contrib sudo -u postgres createuser -S -D -R pandora sudo -u postgres createdb -T template0 --locale=C --encoding=UTF8 -O pandora pandora +echo "CREATE EXTENSION pg_trgm;" | sudo -u postgres psql pandora #rabbitmq RABBITPWD=$(pwgen -n 16 -1) @@ -38,10 +39,12 @@ DATA_SERVICE = "" SITE_CONFIG = '$SITE_CONFIG' BROKER_PASSWORD = "$RABBITPWD" XACCELREDIRECT = True +DB_GIN_TRGM = True EOF cd /srv/pandora/pandora sudo -u pandora python manage.py syncdb --noinput +sudo -u pandora python manage.py sqlfindindex | sudo -u pandora python manage.py dbshell echo "UPDATE django_site SET domain = '$HOST.local', name = '$HOST.local' WHERE 1=1;" | sudo -u pandora python manage.py dbshell @@ -59,3 +62,36 @@ service pandora start sed "s/__PREFIX__/\/srv\/pandora/g" "/srv/pandora/etc/nginx/vhost.in" > "/etc/nginx/sites-available/default" service nginx restart +cat > /usr/local/bin/fixtime </dev/null + sleep 600 +done +EOF +chmod +x /usr/local/bin/fixtime +cat > /usr/local/bin/genissue < /etc/rc.local << EOF +#!/bin/sh -e +#vm has one network interface and that might change, make it not persistent +rm -f /etc/udev/rules.d/70-persistent-net.rules + +#vm can be suspended, this help to keep the time in sync +/usr/local/bin/fixtime & + +#update issue +/usr/local/bin/genissue > /etc/issue +EOF +chmod +x /etc/rc.local