Tuesday, May 15, 2012

Install Pip + Heroku + Foreman in Ubuntu 12.04

UPDATE:
Heroku has released their own toolkit, so this steps may no longer be required.
https://toolbelt.heroku.com/


Installing rails

You need to have ruby installed on your system
To install ruby, type in:

sudo apt-get install ruby

You can install rails either through gem or apt-get. I installed it using apt-get. You can do that by typing

sudo apt-get install rails

Installing heroku:

For heroku you need to have gem installed, to install gem, using apt-get type:

sudo apt-get install rubygems1.8

Also, before installing heroku you need to install rubydev as directly installing heroku gave me problems. To install rubydev type:

sudo apt-get install ruby1.8-dev

To add the .gem directory to your path type in:

gedit ~/.bashrc

At the end of the file type in:

sudo apt-get install python-pip
sudo apt-get install libpq-dev python-dev


PATH=$PATH:/home/_username_/.gem/ruby/1.8/bin
export PATH
(Replace _username_ with your username)

Now type in

source ~/.bashrc

This will add gem to your path. Now install heroku

now install heroku by typing:

sudo gem install heroku

And you are done! Heroku is installed. You may want to install additional tools needed by heroku, documented as following.

sudo gem install foreman

Install virtualenv
sudo apt-get install python-virtualenv

You can also install django in env in order to deploy django to Heroku see this tutorial for further instructions
pip install Django psycopg2

Deploying Django Apps to Heroku (with existing git repository)

Introduction

So basically i decided to write this tutorial based on this blog and the official tutorial.

The main difference (apart from putting the best of the 2 together) is that this tutorial covers django deployment to heroku assuming that you already have a GIT repository with your remote references (bitbucket , github , etc).

By doing this tutorial the heroku remote reference will be added automatically to your .git , so you will have 2 remote references and you can choose where you want to push to. You can  then git push origin master or git push heroku master.

The above links explain in detail the meaning of every actions, i am merely stating the commands i used in my case (that hopefully will be yours) to deploy my app.

Prerequisites :


- Heroku account
- Heroku command line client
- Python 2.7, Django 1.4, virtualenv, pip , git
- Must use pip to manage dependencies with a requirements.txt file


I am using Ubuntu 12.04 LTS. I have all the dependencies asked by installing them through this tutorial . Make sure you have Django installed in your virtualenv using pip install Django psycopg2

This example uses a repository for one of the projects i was working on, change it according to your needs.

Commands

1 . git clone https://bitbucket.org/psychok7/human-computer-interaction.git
2 . cd human-computer-interaction/
3 . virtualenv venv --distribute  #you need to create because its not on .git
4 . source venv/bin/activate
5 . pip freeze > requirements.txt   #add the rest of the dependencies by hand like for example Django==1.4 , psycopg2==2.4.5 if it doesn't create automatically

#install dependencies in case you need them
  pip install -r requirements.txt
#add the remote references only if necessary (for example cloning in another computer) using
   git remote rm heroku
   git remote add heroku git@heroku.com:newname.git
#Exclude unnecessary env files from git by creating a .gitignore file and adding env and *.pyc on it


6 . git add .
7 . git commit -m "my django app"    #commit to git
8 . heroku create --stack cedar
9 . git push heroku master

#if you get errors check the log for missing dependencies, etc. then add the dependencies to requirements.txt


10 . heroku run python fastparqsite/manage.py syncdb

#everything should be up and running now


Useful tips:


1 . heroku pg:reset SHARED_DATABASE #delete remote database
2 . chmod 755 fastparqsite/manage.py (and commit it) #if you get a permission denied error this might be useful
3 . pip install -r requirements.txt #install dependencies on local machines after cloning
4 . use guarnicon webserver instead of the default one in heroku (guarnicon is better)
5 . Make sure your settings.py has its relative paths properly set, see this example if not you might run into errors.