Crowdsource Platform - Crowdresearch HCI Stanford
This is a Django 1.8 app using a Postgres database that can be deployed to Heroku.
Setup
Please follow the GitHub tutorial to setup the repository.
If you are on Windows or want a simpler (automatic) setup process, please try the instructions in the Setup with Vagrant section. Solutions to common errors can found on the FAQ page
Install Postgres and create a new database:
bash> psql
psql> CREATE DATABASE crowdsource_dev ENCODING 'UTF8';
Create a local_settings.py
file in the project root folder and configure it to connect to the Postgres database:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": "crowdsource_dev"
}
}
Make sure you have Python installed. Test this by opening a command line terminal and typing `python'.
Install virtualenv to manage a local setup of your python packages. Go into the directory with the checkout of the code and create the Python virtual environment:
bash> virtualenv venv
Source the virtual environment, install dependencies, and migrate the database:
bash> source venv/bin/activate
bash> pip install -r requirements.txt
bash> python manage.py makemigrations oauth2_provider
bash> python manage.py migrate
If this is your first time setting it up, you need to initialize your migrations and database:
bash> python manage.py makemigrations
bash> python manage.py migrate
If you instead have a database but do not have migrations:
bash> python manage.py makemigrations crowdsourcing
bash> python manage.py migrate --fake-initial
Install node.js. If you have a Mac, we recommend using Homebrew. Then:
bash> brew install node
For Ubuntu or Debian:
bash> sudo apt-get update
bash> sudo apt-get install nodejs nodejs-legacy npm
Now, you can install the dependencies, which are managed by a utility called Bower:
bash> npm install -g bower
bash> bower install
If there are no errors, you are ready to run the app from your local server:
bash> python manage.py runserver
To serve the local site over https, a sample certificate and key are provided in the repo. To start it, use this command instead of the runserver
command above:
gunicorn -b 127.0.0.1:8000 -b [::1]:8000 csp.wsgi --workers 2 --keyfile private_key.pem --certfile cacert.pem
This uses the gunicorn
server, which is used in production as well. Here, --workers
determines the number of instances of the server that will be created. In most cases, 1 will work just fine.
And you can visit the website by going to https://127.0.0.1:8000 in your web browser.
You will see a untrusted certificate message in most modern browsers. For this site (and this site only), you may ignore this warning and proceed to the site.
Where can I get data?
-
Current file: following data supports tasksearch, task, ranking
bash> python manage.py loaddata fixtures/neilCrowdsourcingRankingData.json bash> python manage.py loaddata fixtures/neilTaskProfileData.json bash> python manage.py loaddata fixtures/dmorinaCategoryData.json
OPTIONAL 2) Ranking Dataset (>800 records already included in #1)
bash> python manage.py loaddata fixtures/neilCrowdsourcingRankingData.json
-
Optional to dump data from environment to the file bash> python manage.py dumpdata crowdsourcing > fixtures/neilCrowdsourcingRankingData.json
-
How to generate data dynamically with autofixture
bash> python manage.py loadtestdata AppName.Model:NUMBER OF RECORDS
Example: bash> python manage.py loadtestdata crowdsourcing.UserCountry:15
Setup with Vagrant
This approach might be useful if you're on Windows or have trouble setting up postgres, python, nodejs, git, etc. It will run the server in a virtual machine.
First install Virtualbox and Vagrant.
If you are on Windows, you should also install Git. During the setup process, select "Use Git and optional Unix tools from the Windows Command Prompt" (on the "Adjusting your PATH environment" page), and "Checkout as-is, commit Unix-style line endings" (on the "Configuring the line ending conversions" page).
Clone this repo to get the code:
git clone https://github.com/crowdresearch/crowdsource-platform.git
cd crowdsource-platform
Then run the command:
vagrant up
This will set up an Ubuntu VM, install prerequisites, create databases, and start the machine. Then run:
vagrant ssh
This will now give you a shell in your virtual machine. It will automatically cd to /home/vagrant/crowdsource-platform where the code is (this is a shared folder with the host machine)
Now you can run the server:
python manage.py runserver [::]:8000
And you can visit the website by going to http://localhost:8000 in your web browser.
To serve the local site over https, a sample certificate and key are provided in the repo. To start it, use this command instead of the runserver
command above:
gunicorn -b 127.0.0.1:8000 -b [::1]:8000 csp.wsgi --workers 2 --keyfile private_key.pem --certfile cacert.pem
This uses the gunicorn
server, which is used in production as well. Here, --workers
determines the number of instances of the server that will be created. In most cases, 1 will work just fine.
And you can visit the website by going to https://127.0.0.1:8000 in your web browser.
You will see a untrusted certificate message in most modern browsers. For this site (and this site only), you may ignore this warning and proceed to the site.
On subsequent runs, you only need to run:
vagrant up
vagrant ssh
python manage.py runserver [::]:8000
#Heroku
Every PR should be that does something substantial (i.e. not a README change) must be accompanied with a live demo of the platform. To spin up your own heroku instance, you can sign up for an account for free and follow instructions found here.
After setting up your own heroku instance, use this command to deploy your branch to that instance.
git push heroku yourbranch:master
Initial setup requires manually migrating the database to your heroku instance. The following commands must be issued in this order for a successful migration. Try running:
$ heroku run python manage.py migrate
In case of the auth_user does not exist error; view the migrations:
heroku run python manage.py showmigrations
and apply the auth migration first
heroku run python manage.py migrate auth
after that you can continue with
heroku run python manage.py makemigrations crowdsourcing
heroku run python manage.py makemigrations oauth2_provider
heroku run python manage.py migrate