devroom.io/drafts/2011-11-18-deploying-a-third-party-rails-application-like-gitlab.md
Ariejan de Vroom dbae98c4c0 Moar updates
2013-03-24 14:27:51 +01:00

69 lines
3.0 KiB
Markdown

---
title: "Deploying a third-party Rails application - like Gitlab"
kind: article
slug: deploying-a-third-party-rails-application-like-gitlab
created_at: 2011-11-18
tags:
- Capistrano
- github
- gitlab
- deploy
---
We all know how to deploy our own Rails projects. (If not, [read this guide][1].) But how do you handle deploying a third-party application that may require some customisation on your part?
A good example would be [Gitlab][gitlab]
Gitlab is an open source Github clone, build using Ruby on Rails. It's a nice project that uses Gitosis under the hood to manage your git repositories. There are [several][2] [good][3] installation guides available on the web, but they all assume you want to deploy gitlab verbatim - without any modification or configuration
I have also setup Gitlab, but I want to use capistrano and unicorn. I also want to tweak some configuration. In some rare cases I want to fix an annoying bug and not wait for the Gitlab team to pull it.
Doing a `git pull` on my remote server just won't cut it.
## Fork! Fork!
What I did was clone Gitlab and use the same principles describe in my [_Contributing to open source with Github_][4] to apply my own changes and merge any upstream changes when they are available.
Here's how I set everything up.
First, clone the official Gitlab repository and name it `upstream`.
git clone --origin upstream https://github.com/gitlabhq/gitlabhq.git my_git_server
Next I made all the changes I want. I updated `config/gitosis.yml` and `unicorn` to `Gemfile` and setup Capistrano.
I then pushed this to my own git server. This is the same server Capistrano will use to pull changes from.
git remote add origin git@git.ariejan.net:my_git_server.git
git push origin master
cap deploy
That's all there is to deploying Gitlab from my own repository.
## Merging upstream changes
Now, the Gitlab crew is pushing out new features at an amazing rate. So, how do I get those new features (and the occasional bug fix) into my copy of Gitlab for deploying?
git fetch upstream
Remember how we named the official Gitlab repository `upstream` earlier? With this `fetch` we get all changes from their repository (but we don't apply them to anything yet).
Then, merge the upstream changes with your own branch.
git merge upstream/master
There may be merge conflicts, just resolve them and commit your merge. Then again to deploy:
git push origin master
cap deploy
## Why do this?
The reason I use this approach is that it's easy to merge upstream changes and have my own customizations and deployment tools at the same time.
[1]: http://ariejan.net/2011/09/14/lighting-fast-zero-downtime-deployments-with-git-capistrano-nginx-and-unicorn
[gitlab]: http://www.gitlabhq.com
[2]: http://www.ryanwersal.com/blog/2011/10/18/installing-gitlab-on-ubuntu-server/
[3]: http://nepalonrails.tumblr.com/post/12603081685/setup-gitlab-github-clone-using-vagrant-and-chef
[4]: http://ariejan.net/2011/11/09/contributing-to-open-source-with-github