django repo for running the GITenberg website
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.ebextensions
ansible
assets
gitensite
letsencrypt
static
upload
.gitignore
.travis.yml
Procfile
README.asciidoc
Vagrantfile
example.env
manage.py
requirements.txt

README.asciidoc

A Django website for GITenberg

The goal of gitensite is to:

  • provide information about the GITenberg project

  • document the major areas of work of GITenberg

  • connect visitor with areas to contribute

  • list information about GITenberg books

  • distribute completed ebooks

Set up

This is a django/python project, so you are going to want to use some standard python dev tools.

environment

Copy example.env to .env and store your local db secret and other values there. Load that file into your environment with:

source .env

virtualenv

Virtual environments in python are a way of separating and reproducing the python package requirements.

From the root of the project

sudo pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

For every new terminal, or when returning to work on the project, you will need to run

source venv/bin/activate

OSX issues with bcrypt

On OSX, apple occasionally moves cffi’s location, which bcrypt depends on. This causes pip to fail when installing. Deactive your virtualenv, set a bash variable, and install system-wide.

$ # Instal homebrew. See http://brew.sh
$ # Install cffi. See  https://cffi.readthedocs.org/en/latest/#macos-x
# you may need to find and set include_dirs in setup.py
$ brew install pkg-config libffi
$ pip install bgcrypt
$ source venv/bin/activate

How to install dependencies on OS X with conda

conda create -n giten_site python=2 pip
conda install psycopg2
conda install cryptography
pip install -r requirements.txt

Database(s)

We use Postgres.

To start a local db run:

./manage.py migrate
./manage.py createsuperuser

If you have modified the database, generate new database migrations:

./manage.py makemigrations

And run them with:

./manage.py migrate

Getting db data

To fill out data in your local db, you’ll first need to download and unpack the Project Gutenberg RDF metadata. you can run the provided load_repos management command: from https://www.gutenberg.org/cache/epub/feeds/rdf-files.tar.zip

Then run ./manage.py load_repos <rdf_library_path>

Where <rdf_library_path> is the address where you unzipped the rdf metadata

Apps

There are currently three apps in the project:

  • content for containing templates and views for website pages

  • bookrepo [deprecated] for interacting with github and storing info about books

  • bookinfo for metadata for the repos

Elastic Beanstalk

this website is deployed on Elastic Beanstalk. The main difficulty has been managing python dependencies- EB doesn’t manage nested dependencies, so you have to stage the install. To load up the initial database, push the metadata feed from pg along with the install, then

eb ssh

into an instance, then execute

cd /opt/python/current
source ./env
sudo mkdir -m 777 tmp
unzip ./app/assets/rdf-files.tar.zip -d ./tmp
cd tmp
tar -xf rdf-files.tar
cd ..
python ./app/manage.py load_repos /opt/python/current/tmp/cache/epub

Vagrant

To install with Vagrant, follow these steps:

  1. First install (on the local machine):

    • VirtualBox

    • Vagrant

    • Ansible

  2. Then from the project directory run this command:

    vagrant up
  3. Then wait about 2 hours while it does its thing (loading the DB takes a very long time)

  4. To log in:

    vagrant ssh
  5. Once logged in

    cd giten_site

    The virtualenv and environment variables should be automatically loaded upon login.

  6. Start the server

    python manage.py runserver 0.0.0.0:5001

    Use port 5001 since the Vagrantfile will automatically forward this port to the local port 5001. To use a different port, change the Vagrantfile on the host machine and run vagrant halt and vagrant up. Using the IP 0.0.0.0 will permit django to serve this on any IP. When running in vagrant the webserver doesn’t recognize localhost addresses as being from localhost since it is port-forwarded into the virtual machine.

  7. Go to http://localhost:5001

  8. Done.