*************************** Installation Instructions *************************** These are the installation instructions for the Web Interface. For instructions for the Base Code see the `google code `_ site. Getting the Source ==================== * `Cogent-house (Base Code) `_ * `Cogent-Viewer (Web Interface) `_ Dependencies ================== There are some dependencies to install the web interface #. python-dev #. python-pip #. python-virtualenv #. libmysqlclient-dev #. git Additionally, mysql-python currently require In Ubuntu (or another debian based system) these can be installed using:: $sudo apt-get install python-dev python-pip python-virtualenv libmysqlclient-dev bzr git Installing in a virtual environment ==================================== To aid development, this code has been configured to use setuptools for distribution. This allows changes to the code to be tested using the `develop `_ function. Allowing changes to the code to be immediately reflected in the python environment, rather than requiring a fresh #setup.py install call. Additionally, I recommend developing in a `virtual environment `_ this is the equivalent of a clean python install, allowing any problems that may occur with missing packages / different package versions to be seen. This is a great advantage when packaging, as installing from scratch allows testing of installation steps. .. note:: Using a virtualenv is not mandatory. For example if you are installing on a production server and are unlikely to make any changes to the code. However, for development its a extremely useful tool. Setting up a virtual environment --------------------------------- To setup the virtual environment. .. note:: These steps use *pip* to install packages. However, feel free to use your favourite package manager (easy-install etc) #. Install virtualenv:: $pip install virtualenv #. Setup Virtual Environment. Using the *--no-site-packages* flag means that we get the equivalent of a clean python install:: $virtualenv --no-site-packages testenv To use the virtual environment activate it. Missing this stage can be a common source of problems, as the program tries to use packages that are not in the system wide library:: $cd testenv $source bin/activate (testenv)$ And to shut everything down afterwards, deactivate it:: (testenv)$ deactivate $ Installing the application =========================== Downloading the Code ---------------------- Grab the latest version of the source from launchpad For Stable:: $bzr branch lp:cogent-house To install in *development* mode:: (testenv)$ setup.py develop .. note:: There appears to be a bug in easy_install when installing numpy. This means that the setup.py develop step may not work. A simple work around is to install numpy with pip (which for some reason works) then rerun the setup script:: $pip install numpy $python setup.py develop Setting Up the Database ------------------------ The database setup script can be called by running:: $initialize_cogentviewer_db .ini Installing the Javascript Libraries ----------------------------------- Currently, the web interface uses a local version of the javascript libaries, this avoids any problems when there is no internet connection available. Unpack the **jsLibs.tar.gz** file in the same base directory as the webinterface:: dan@einstein:~$tar -xvzf jsLibs.tar.qz dan@einstein:~$ ls -l total 38956 drwxr-xr-x 4 dan dan 4096 2012-06-15 14:53 cogent-house drwxr-xr-x 5 dan dan 4096 2012-06-13 12:00 jslibs -rw-r--r-- 1 dan dan 7456451 2012-06-15 14:57 jsLibs.tar.gz Running a Local Copy of the Server =================================== Once the application is installed in development mode. It is possible to test the server #. Activate the virtual env:: $cd testenv $source bin/activate #. Navigate to the cogent-viewer base directory:: (testenv)$cd cogentviewer #. Start the Paste server:: (testenv)$pserve --reload development.ini The web interface should now be available at `127.0.0.1:6543 <127.0.0.1:6543>`_ Running Unit tests ================== The application also has a suite of unit tests. Testing is performed using the `nose `_ test runner. Setting up a testing database ------------------------------- Rather than use a live database, the Unit tests use a separate testing DB. To set this up create a new schema *testStore* and user *test_user* with password *test_user* We also need to populate the database with its initial testing data the simplest way to do this is to run an instance of the paste server using the test.ini script:: $initialize_cogentviewer_db test.ini .. note:: If you want to use an alternative database, it is possible to modify the database string found in the **test.ini** setup file. .. warning:: Unfortunately it is impossible to run the unit tests using a separate sqlite database There have been locking issues as parts of the code try to access the DB, meaning that several tests fail. Running the Unit tests ---------------------- As the REST interface communicates with the server, we need to have an instance of the web server running for the tests to complete. #. Start an Instance of the paste server running the test.ini script:: (testenv)$pserve serve --reload test.ini #. Run the Unit tests:: (testenv)$nosetests Running Under Apache using port forwarding ============================================ An alternative method to serve the web interface under apache, setup a reverse proxy to forward requests to the paste serve Setup Mod Proxy ----------------- We first need to enable the mod-proxy module on the apache server:: $sudo a2enmod proxy .. note:: If you get an error loading the site, you may need to enable proxy_http Then Modify the default site */etc/apache2/sites-available/default*:: ProxyRequests Off ProxyPreserveHost On Order allow,deny Allow from all ProxyPass /webInterface/ http://localhost:6543/ ProxyPassReverse /webInterface/ http://localhost:6543/ Finally we need to make a modification to the paster .ini script used to serve the application, add the following directing to the config file, just before the *[server:main]* directive:: filter-with = urlprefix [filter:urlprefix] use = egg:PasteDeploy#prefix prefix = /webInterface .. note:: This modification has been made in the **proxy.ini** config file Building the Documentation ============================ The Documents are built with Sphinx `_ Most of the information comes from docstrings in the code itself. Please keep these up to date. To build the Docs it is as simple as:: $cd docs $make html Exporters are available for HTML and Latex (amongst others) .. warning:: Some Ubuntu versions of sphinx are old, and will generate an error when building the graphs. To avoid this install the latest version of sphinx from PyPy:: #sudo pip install --upgrade Sphinx .. _upgrading-the-database: Updating the Database ====================== The webinterface requires an upto date version of the database. If the web interface is installed on top of an pre-exisiting base server. You will need to update the database using the following steps. #. Get the and latest version of the base software, from `here `_ #. **Backup the Database**:: $mysqldump -u chuser -l -v ch > chDump.sql #. Install Alembic:: $pip install alembic #. **Backup the Database** (Included here incase you don't feel it is important) #. Run the Alembic Upgrade Script:: $alembic upgrade head