]> git.ozlabs.org Git - patchwork/blobdiff - docs/INSTALL
tox: Update versions of Django to be tested
[patchwork] / docs / INSTALL
index face0dc832ce22b33eba9f041ca9626a8c022807..bd9577023deed4e75d72be67575e0599f40f7e62 100644 (file)
@@ -15,6 +15,7 @@ in brackets):
   * A database server (postgresql, mysql)
   * relevant python modules for the database server (e.g: python-mysqldb)
 
+
 1. Database setup
 
     At present, I've tested with PostgreSQL and (to a lesser extent) MySQL
@@ -22,7 +23,7 @@ in brackets):
     either, email me.
 
     For the following commands, a $ prefix signifies that the command should be
-    entered at your shell prompt, and a > prefix signifies the commant-line
+    entered at your shell prompt, and a > prefix signifies the command-line
     client for your sql server (psql or mysql)
 
     Create a database for the system, add accounts for two system users: the
@@ -52,16 +53,20 @@ in brackets):
         settings, using local_settings.py (see below) to override the defaults
         in settings.py:
 
-        DATABASE_ENGINE = 'postgresql_psycopg2'
-        DATABASE_NAME = 'patchwork'
-        DATABASE_USER = 'patchwork'
-        DATABASE_PASSWORD = 'my_secret_password
-        DATABASE_HOST = 'localhost'
-        DATABASE_PORT = ''
+        DATABASES = {
+            'default': {
+                'ENGINE': 'django.db.backends.postgresql_psycopg2',
+                'HOST': 'localhost',
+                'PORT': '',
+                'USER': 'patchwork',
+                'PASSWORD': 'my_secret_password',
+                'NAME': 'patchwork',
+            },
+        }
 
     For MySQL:
         $ mysql
-        > CREATE DATABASE 'patchwork';
+        > CREATE DATABASE patchwork CHARACTER SET utf8;
         > CREATE USER 'www-data'@'localhost' IDENTIFIED BY '<password>';
         > CREATE USER 'nobody'@'localhost' IDENTIFIED BY '<password>';
 
@@ -69,83 +74,102 @@ in brackets):
        settings, using local_settings.py (see below) to override the defaults
        in settings.py:
 
-       DATABASE_ENGINE = 'mysql'
-       DATABASE_NAME = 'patchwork'
-       DATABASE_USER = 'root'
-       DATABASE_PASSWORD = 'my_secret_root_password'
-       DATABSE_HOST = 'localhost'
-       DATABASE_PORT = ''
+        DATABASES = {
+            'default': {
+                'ENGINE': 'django.db.backends.mysql',
+                'HOST': 'localhost',
+                'PORT': '',
+                'USER': 'patchwork',
+                'PASSWORD': 'my_secret_password',
+                'NAME': 'patchwork',
+                'TEST_CHARSET': 'utf8',
+            },
+        }
+
+        TEST_CHARSET is used when creating tables for the test suite. Without
+        it, tests checking for the correct handling of non-ASCII characters
+        fail.
+
 
 2. Django setup
 
-        Set up some initial directories in the patchwork base directory:
+    Set up some initial directories in the patchwork base directory:
+
+      mkdir -p lib/packages lib/python
 
-         mkdir -p lib/packages lib/python
+    lib/packages is for stuff we'll download; lib/python is to add
+    to our python path. We'll symlink python modules into lib/python.
 
-        lib/packages is for stuff we'll download, lib/python is to add
-        to our python path. We'll symlink python modules into lib/python.
+    At the time of release, patchwork depends on django version 1.5 or
+    later. Your distro probably provides this. If not, do a:
 
-        At the time of release, patchwork depends on django version 1.5 or
-        later. Your distro probably provides this. If not, do a:
+      cd lib/packages
+      git clone https://github.com/django/django.git -b stable/1.5.x
+      cd ../python
+      ln -s ../packages/django/django ./django
 
-         cd lib/packages
-         git clone https://github.com/django/django.git -b stable/1.5.x
-         cd ../python
-         ln -s ../packages/django/django ./django
+    The patchwork/settings/*.py files contain default settings for patchwork,
+    you'll need to configure settings for your own setup.
 
-        The settings.py file contains default settings for patchwork, you'll
-        need to configure settings for your own setup.
+    Rather than editing these files (which will cause conflicts when you
+    update the base patchwork code), create a file 'production.py', based on
+    the example:
 
-        Rather than edit settings.py, create a file 'local_settings.py', and
-        override or add settings as necessary. You'll need to define the
-        following:
+       cp patchwork/settings/production.example.py \
+          patchwork/settings/production.py
 
-          SECRET_KEY
-          ADMINS
-          TIME_ZONE
-          LANGUAGE_CODE
-          DEFAULT_FROM_EMAIL
-          NOTIFICATION_FROM_EMAIL
+    and override or add settings as necessary. You'll need to define the
+    following:
 
-        You can generate the SECRET_KEY with the following python code:
+      SECRET_KEY
+      ADMINS
+      DATABASES
+      TIME_ZONE
+      LANGUAGE_CODE
+      DEFAULT_FROM_EMAIL
+      NOTIFICATION_FROM_EMAIL
 
-          import string, random
-          chars = string.letters + string.digits + string.punctuation
-          print repr("".join([random.choice(chars) for i in range(0,50)]))
+    You can generate the SECRET_KEY with the following python code:
 
-        If you have patchwork installed in somewhere other than /srv/patchwork,
-        you'll also need to define:
+      import string, random
+      chars = string.letters + string.digits + string.punctuation
+      print repr("".join([random.choice(chars) for i in range(0,50)]))
 
-          ROOT_DIR
-          MEDIA_ROOT
-          TEMPLATE_DIRS
+    If you wish to enable the XML-RPC interface, add the following to
+    your local_settings.py file:
 
-        If you wish to enable the XML-RPC interface, add the following to
-        your local_settings.py file:
+      ENABLE_XMLRPC = True
 
-          ENABLE_XMLRPC = True
+    Then, get patchwork to create its tables in your configured database:
 
-        Then, get patchwork to create its tables in your configured database:
+     PYTHONPATH=lib/python ./manage.py syncdb
 
-         cd apps/
-         PYTHONPATH=../lib/python/django ./manage.py syncdb
+    and initialise the static content:
 
-        And add privileges for your mail and web users. This is only needed if
-        you use the ident-based approach. If you use password-based database
-        authentication, you can skip this step.
+     PYTHONPATH=lib/python ./manage.py collectstatic
 
-        Postgresql:
-          psql -f lib/sql/grant-all.postgres.sql patchwork
+    You'll also need to load the initial tags and states into the
+    patchwork database:
 
-        MySQL:
-          mysql patchwork < lib/sql/grant-all.mysql.sql
+     PYTHONPATH=lib/python ./manage.py loaddata default_tags default_states
+
+    Finally, add privileges for your mail and web users. This is only needed if
+    you use the ident-based approach. If you use password-based database
+    authentication, you can skip this step.
+
+    Postgresql:
+      psql -f lib/sql/grant-all.postgres.sql patchwork
+
+    MySQL:
+      mysql patchwork < lib/sql/grant-all.mysql.sql
 
 
 3. Apache setup
 
-Example apache configuration files are in lib/apache2/.
+    Example apache configuration files are in lib/apache2/.
+
+    wsgi:
 
-wsgi:
         django has built-in support for WSGI, which supersedes the fastcgi
         handler. It is thus the preferred method to run patchwork.
 
@@ -158,7 +182,8 @@ wsgi:
          a2enmod wsgi
          apache2ctl restart
 
-mod_python:
+
+     mod_python:
 
         An example apache configuration file for mod_python is in:
 
@@ -168,7 +193,8 @@ mod_python:
         web server is used for serving php files, the fastcgi method may suit
         instead.
 
-fastcgi:
+
+    fastcgi:
 
         django has built-in support for fastcgi, which requires the
         'flup' python module. An example configuration is in:
@@ -179,11 +205,12 @@ fastcgi:
 
         Once you have apache set up, you can start the fastcgi server with:
 
-          cd /srv/patchwork/apps
+          cd /srv/patchwork/
           ./manage.py runfcgi method=prefork \
                               socket=/srv/patchwork/var/fcgi.sock \
                               pidfile=/srv/patchwork/var/fcgi.pid
 
+
 4. Configure patchwork
     Now, you should be able to administer patchwork, by visiting the
     URL:
@@ -193,14 +220,16 @@ fastcgi:
     You'll probably want to do the following:
 
       * Set up your projects
-      * Configure your website address (in the Sites) section of the admin
+      * Configure your website address (in the Sites) section
 
+    
 5. Subscribe a local address to the mailing list
 
-     You will need an email address for patchwork to receive email on - for
-     example - patchwork@, and this address will need to be subscribed to the
-     list. Depending on the mailing list, you will probably need to confirm the
-     subscription - temporarily direct the alias to yourself to do this.
+    You will need an email address for patchwork to receive email on - for
+    example - patchwork@, and this address will need to be subscribed to the
+    list. Depending on the mailing list, you will probably need to confirm the
+    subscription - temporarily direct the alias to yourself to do this.
+
 
 6. Setup your MTA to deliver mail to the parsemail script
 
@@ -208,14 +237,15 @@ fastcgi:
     directory. (Note, do not use the parsemail.py script directly). Something
     like this in /etc/aliases is suitable for postfix:
 
-      patchwork: "|/srv/patchwork/apps/patchwork/bin/parsemail.sh"
+      patchwork: "|/srv/patchwork/patchwork/bin/parsemail.sh"
 
     You may need to customise the parsemail.sh script if you haven't installed
     patchwork in /srv/patchwork.
 
     Test that you can deliver a patch to this script:
 
-     sudo -u nobody /srv/patchwork/apps/patchwork/bin/parsemail.sh < mail
+     sudo -u nobody /srv/patchwork/patchwork/bin/parsemail.sh < mail
+
 
 7. Set up the patchwork cron script
 
@@ -225,14 +255,13 @@ fastcgi:
     Something like this in your crontab should work:
 
       # m h  dom mon dow   command
-      PYTHONPATH=apps:.
-      DJANGO_SETTINGS_MODULE=settings
-      */10 * * * * cd patchwork; python apps/patchwork/bin/patchwork-cron.py
+      */10 * * * * cd patchwork; ./manage.py cron
 
 
     - the frequency should be the same as the NOTIFICATION_DELAY_MINUTES
     setting, which defaults to 10 minutes.
 
+
 8. Optional: Configure your VCS to automatically update patches
 
     The tools directory of the patchwork distribution contains a file
@@ -251,6 +280,7 @@ fastcgi:
     similar hook using pwclient to update patch state. If you do write
     one, please contribute it.
 
+
 Some errors:
 
 * __init__() got an unexpected keyword argument 'max_length'
@@ -267,7 +297,7 @@ Some errors:
    to the tables.
 
 * pwclient fails for actions that require authentication, but a username
-  and password is given int ~/.pwclient rc. Server reports "No authentication
+  and password is given in ~/.pwclientrc. Server reports "No authentication
   credentials given".
 
  - if you're using the FastCGI interface to apache, you'll need the