Project

General

Profile

Development cycle » History » Revision 13

Revision 12 (Ward Vandewege, 09/21/2011 03:07 PM) → Revision 13/14 (Tom Clegg, 03/17/2016 09:22 PM)

h1. Development cycle 

 h2. Getting the code base 

  git clone git://git.curoverse.com/tapestry.git 
 cd tapestry 
 git submodule init 
 git submodule update 

 h2. Running tests 

 Add these configs to your /etc/mysql/my.cnf, otherwise each "create table" will take ~0.5 seconds, and you'll wait ~3 minutes each time you run @rake test@ before the tests start running. 
 * <pre> 
 innodb_file_per_table = 0 
 innodb_stats_persistent = 0 
 </pre> 

 You can run tests in a docker container. 
 * Make sure @/etc/mysql/my.cnf@ has @bind-address = 0.0.0.0@ or whatever is suitable. 
 * Create a @tapestry@ user and a @tapestry_test@ database on your docker host (or somewhere else reachable from a docker container). 
 * <pre>create database tapestry_test; 
 grant all privileges on tapestry_test.* to tapestry identified by 'secretzzz'; 
 </pre> 
 * Create @config/database.yml@ (see @config/database.yml.example@) 
 * @make docker-test@ git@git.clinicalfuture.com:tapestry.git 

 h2. Writing and contributing code 

 Start a branch like username/master or username/rails3 

  git branch example/rails3 
 git checkout example/rails3 

 Do something trivial like 

 * add app/views/pages/specimen_collection.html.erb 
 * add link to it in app/views/pages/home.html.erb 

 Commit it.    If you refer to the issue# in the comment, redmine will notice this and do smart things (e.g., link to the commit from the issue page). 

  git add ... 
 git commit -m 'description of stuff (closes #123)' 

 Push it 

  git push 

 Generate a pull request 

  git request-pull e68ab19^ git@git.clinicalfuture.com:tapestry.git e68ab19 

 Send the pull request to someone like Ward 

 h2. Merging code from other contributors/branches 

 Fetch latest code in other developers branches 

  git fetch 

 List remote branches 

  git branch -a 

 Switch to the other branch 

  git checkout origin/example/rails3 

 (git will complain about being in a detached head state, but that's fine - just don't commit to this state) 

 Now look around, test 

  git log 

 Switch to production branch (set up with @git checkout --track origin/rails3@ if you haven't already) and make sure it's up-to-date 

  git checkout rails3 
 git pull origin rails3 

 See what hasn't been merged 

  git cherry -v rails3 origin/example/rails3 

 Cherry-pick a commit 

  git cherry-pick e68ab19 

 Or merge the entire remote tree (this will fetch and merge but not yet commit) 

  git merge --no-commit origin/tomc/rails3 
 
 When you're happy,  

  git commit 

 Or rewind 

  git reset --hard rails3 

 Finally, push 

  git push 

 h2. Deploying to my-dev 

 Basics 

  sudo gem install capistrano 

 Make sure "ssh root@www-dev.sum" puts you in root@www-dev and that *you have an SSH agent available.*    You might need in @~/.ssh/config@: 

  Host www-dev.sum 
   HostName www-dev 

 Check out production branch 

  git checkout rails3 

 Deploy to www-dev 

  cap deploy 

 The capistrano task will run any required db migrations automatically. If you ever need to run them manually, you can do this (on www-dev): 

  ssh root@www-dev.sum sh -c "'cd /var/www/my-dev.personalgenomes.org/current && RAILS_ENV=staging rake db:migrate'" 

 h2. Deploying to production server 

 Make sure "ssh root@www-prod.sum" puts you in root@www-prod and that you have a working SSH agent. 

 Check out production branch 

  git checkout rails3 

 Deploy to www-prod 

  cap deploy -f Capfile.production 

 The capistrano task will run any required db migrations automatically. If you ever need to run them manually, you can do this (on www-prod): 

  ssh root@www-prod.sum sh -c "'cd /var/www/my.personalgenomes.org/current && RAILS_ENV=production rake db:migrate'"