DurusWorks

# DurusWorks Documentation

DurusWorks is a web application framework that brings together the key tools developed at the MEMS and Nanotechnology Exchange at Corporation for National Research Initiatives. At CNRI, the current maintainer of DurusWorks is Roger Masse.

## Standard Installation

There are many ways to install and use DurusWorks. Rather than try to describe all of the options, we will describe the way we choose to install and use DurusWorks on the OSX and Linux machines. We will refer to this arrangement as a "standard installation".

In the standard installation, we put almost everything under a `/www` directory. You can use another directory name if you like, but we'll assume throughout these documents that your installation is all under `/www`. To get started, log in as root and execute these commands to make the standard directories (which we assume do not already exist). `mkdir /www mkdir /www/trunk mkdir /www/pythonlib mkdir /www/bin mkdir /www/var; chmod 777 /www/var mkdir /www/qp_sites mkdir /www/ssl mkdir /www/cgi-bin mkdir /www/conf`

The subdirectories are populated as follows:

/www/trunk
  This directory contains the files and python code that we use, including the `DurusWorks` distribution. Download the current DurusWorks distribution tarball and unpack it in `/www/trunk`. The `DurusWorks` created by unpacking the tarball may have a version number suffix. Rename the directory to remove the suffix. Next, compile and install in-place the `DurusWorks` C-extension modules by doing this: `cd /www/trunk/DurusWorks python setup.py build_ext -i rm -r build`

  While we are working in `/www/trunk`, go ahead and install the Apache2 mod_scgi module by doing this: `cd /www/trunk/DurusWorks/scgi sudo make install; sudo make clean`

/www/pythonlib
  This directory is put on python's search path, either by the `PYTHONPATH` environment variable, or by other means. You may, for example, edit your `.profile` to include this: `export PYTHONPATH=/www/pythonlib`

  To initialize this directory, do this: `cd /www/pythonlib sudo ln -s /www/trunk/DurusWorks/durus . sudo ln -s /www/trunk/DurusWorks/qp . sudo ln -s /www/trunk/DurusWorks/qpy . sudo ln -s /www/trunk/DurusWorks/sancho .`

/www/bin
  This directory is included in the developer's `PATH` environment variable. It contains symlinks to command-line tools in the trunk. You may, for example, edit your `.profile` to include `export PATH=/www/bin:$PATH`

  To initialize this directory, do this: `cd /www/bin sudo ln -s /www/trunk/DurusWorks/durus/durus . sudo ln -s /www/trunk/DurusWorks/qp/bin/qp . sudo ln -s /www/trunk/DurusWorks/qp/bin/qpcensus.py . sudo ln -s /www/trunk/DurusWorks/qpy/qpcheck.py . sudo ln -s /www/trunk/DurusWorks/qpy/qpyrun.py . sudo ln -s /www/trunk/DurusWorks/sancho/urun.py .`

/www/var
  This directory, which must be writable by the owner of the running server process, keeps all durus database files, logs, and pid files. If the application stores any data outside the database, it is in some subdirectory of this directory. In the standard installation, all sites have `var_directory='/www/var` in the `SitePublisher.configuration` dictionary.
/www/qp_sites
  This directory contains symlinks to the site directories of all active sites.

  Let's set up the site called `proto`. To initialize the demo site and this directory, do this: `sudo cp -r /www/trunk/DurusWorks/proto /www/trunk/proto cd /www/qp_sites sudo ln -s /www/trunk/proto/site proto cd /www/pythonlib sudo ln -s /www/trunk/proto/lib proto`

/www/ssl
  This directory contains the ssl certificate/key files for your server. If you need to generate a self-signed certificate for development purposes, try this command: `sudo openssl req -new -x509 -nodes -days 365 -out /www/ssl/self.pem -keyout /www/ssl/self.pem`
/www/cgi-bin
  This directory contains any cgi-scripts that your server may require. There may not be any.
/www/conf
  This directory contains Apache web server configuration files. We either replace the standard `/etc/apache2/httpd.conf` file with a symlink to a complete Apache config here, or else we append an directive to the standard `httpd.conf` that includes the contents of a file in this directory.

  For the proto demo application, append `Include /www/conf/apache2_proto.conf` to `/etc/apache2/httpd.conf` and also do this: `ln -s /www/turnk/proto/conf/apache2_proto.conf /www/conf/apache2_proto.conf`

In the standard installation, the applications are also defined in packages in the `/www/trunk` directory. To provide an example of how we organize the code for an application, we'll describe the parts of the demo site called `proto`.

/www/trunk/proto
  This contains the files that define the `proto` site.
/www/trunk/proto/lib
  This contains the `proto` python package. In the standard installation, `/www/pythonlib` contains a symlink named `proto` that points to this directory. This directory typically contains python modules and subpackages that define the data structures and business logic of the site.
/www/trunk/proto/lib/ui
  This contains part of the `proto` specifically related to defining the URL space and constructing web pages. All `.qpy` files for the site are in this directory or subpackages of it. As with all packages that contain `.qpy` files, the `__init__.py` file must contain the commands to run the compiler: `from qpy.compile import compile_qpy_files compile_qpy_files(__path__[0])` This directory contains a `slash.qpy` that defines `SitePublisher` and `SiteDirectory` classes. These classes define the site's configuration.
/www/trunk/proto/lib/ui/static
  This directory contains the static content of the site. It is declared as the `DocumentRoot` of the site in the Apache configuration.
/www/trunk/proto/lib/ui/static/images
  The static images of the site are placed in this directory.
/www/trunk/proto/site
  This contains an empty `__init__.py` and a `slash.py` with this one line: `from proto.ui.slash import import SitePublisher, SiteDirectory`
/www/trunk/proto/doc
  Site-specific documentation is placed here.
/www/trunk/proto/conf
  Site-specific Apache configuration files are placed here. Symlinks to these files are placed in `/www/conf`