I’ve been using a small script to deploy the rails apps I maintain (both work and side projects) for a while now.
It’s helped cut the dud deployments due to two issues:
- Leaving debugger statements on the code, where the debugging gems are not deployed to production.
- Typos or cut text that leave invalid syntax, not caught during development as the codebase is loaded lazily.
I’ll expand the script at some point as I see other issues crippling my deployments.
#! /bin/sh
TARGET=${1:-production}
BRANCH=${2:-main}
test `ag byebug | grep "app\/.*\.rb" | wc -l` = 0
if (($? == 1)); then
echo "Byebug command left in place:"
echo `ag byebug | grep "app\/.*\.rb"`
exit
fi
DEPLOY_CHECK=true bin/rails runner "puts %q{Loaded successfully.}" RAILS_ENV=production
if (($? == 1)); then
echo "Syntax error, app could not execute."
exit
fi
echo "deploying"
git pull origin $BRANCH && git push origin $BRANCH && bundle exec cap $TARGET deploy BRANCH=$BRANCH
Note, DEPLOY_CHECK
is used to prevent eager loading in the development environment:
config/development.rb
Rails.application.configure do
...
config.eager_load= ENV.fetch('DEPLOY_CHECK', false)
...
end
Another note, ag
(https://github.com/ggreer/the_silver_searcher) is great.