A guide for getting things done.
Install the latest version of Xcode from the App Store.
Set up your laptop with this script and these dotfiles.
Get Suspenders.
gem install suspenders
Create the app.
suspenders app --heroku true --github organization/app
Create a new project in Xcode with these settings:
- Check 'Create local git repository for this project'.
- Check 'Use Automatic Reference Counting'.
- Set an appropriate 2 or 3 letter class prefix.
- Set the Base SDK to 'Latest iOS'.
- Set the iOS Deployment Target to 6.0.
- Use the Apple LLVM compiler.
Get liftoff.
gem install liftoff
Run liftoff in the project directory.
liftoff
Get the code.
git clone [email protected]:organization/app.git
Set up the app's dependencies.
cd project
./bin/setup
Use Heroku config to get ENV
variables.
heroku config:pull --remote staging
Delete extra lines in .env
, leaving only those needed for app to function
properly. For example: BRAINTREE_MERCHANT_ID
and S3_SECRET
.
Use Foreman to run the app locally.
foreman start
It uses your .env
file and Procfile
to run processes just like Heroku's
Cedar stack.
- Avoid including files in source control that are specific to your development machine or process.
- Delete local and remote feature branches after merging.
- Perform work in a feature branch.
- Rebase frequently to incorporate upstream changes.
- Use a pull request for code reviews.
Create a local feature branch based off master.
git checkout master
git pull
git checkout -b <branch-name>
Prefix the branch name with your initials.
Rebase frequently to incorporate upstream changes.
git fetch origin
git rebase origin/master
Resolve conflicts. When feature is complete and tests pass, stage the changes.
rake
git add --all
When you've staged the changes, commit them.
git status
git commit --verbose
Write a good commit message. Example format:
Present-tense summary under 50 characters
* More information about commit (under 72 characters).
* More information about commit (under 72 characters).
http:://project.management-system.com/ticket/123
Share your branch.
git push origin <branch-name>
Submit a GitHub pull request.
Ask for a code review in Campfire.
A team member other than the author reviews the pull request. They follow Code Review guidelines to avoid miscommunication.
They make comments and ask questions directly on lines of code in the Github web interface or in Campfire.
For changes which they can make themselves, they check out the branch.
git checkout <branch-name>
rake db:migrate
rake
git diff staging/master..HEAD
They make small changes right in the branch, test the feature in browser, run tests, commit, and push.
When satisfied, they comment on the pull request Ready to merge.
Rebase interactively. Squash commits like "Fix whitespace" into one or a small number of valuable commit(s). Edit commit messages to reveal intent.
git fetch origin
git rebase -i origin/master
rake
View a list of new commits. View changed files. Merge branch into master.
git log origin/master..<branch-name>
git diff --stat origin/master
git checkout master
git merge <branch-name> --ff-only
git push
Delete your remote feature branch.
git push origin --delete <branch-name>
Delete your local feature branch.
git branch --delete <branch-name>
View a list of new commits. View changed files. Deploy to Heroku staging.
git fetch staging
git log staging/master..master
git diff --stat staging/master
git push staging
If necessary, run migrations and restart the dynos.
heroku run rake db:migrate --remote staging
heroku restart --remote staging
Introspect to make sure everything's ok.
watch heroku ps --remote staging
Test the feature in browser.
Deploy to production.
git fetch production
git log production/master..master
git diff --stat production/master
git push production
heroku run rake db:migrate --remote production
heroku restart --remote production
watch heroku ps --remote production
Watch logs and metrics dashboards.
Close pull request and comment Merged.
- Make sure that your
Procfile
is set up to run Unicorn. - Make sure the PG Backups add-on is enabled.
- Create a read-only Heroku Follower for your production database. If a Heroku database outage occurs, Heroku can use the follower to get your app back up and running faster.