Because I hate repeating myself, my team and I have gone to great lengths to make our lives easier in our development environments.
On a recent project, we’ve got a lot of things that we need to make sure that our dev environment functions properly (rails, redis, etc). Rather than set all these things up each time we boot up, we’ve got a few conventions that make us _much_ happier.
1) A current
script/alias.
We give ourselves an alias named current that takes us to that project’s root directory.
# .bash_profile
export PROJECT_NAME=my-fancy-repo-dir
export PROJECT_ROOT=$HOME/workspace/$PROJECT_NAME
alias current='cd $PROJECT_ROOT'
2) A commands
file.
In our project root, we’ve got a file named commands included in our VCS. These commands can be anything from a redis start-up script with config options to a command that runs `rails s` for us. Anytime a new terminal opens up (should be fairly regular), these get refreshed, and changes take effect.
# $PROJECT_ROOT/commands
alias server='bin/rails s'
alias start_redis='redis-server -blah blah blah'
alias start_faye='REDIS_URL=redis://localhost:6379 rackup bin/faye.ru'
# .bash_profile
if [ -f "$PROJECT_ROOT/commands" ]; then
. "$PROJECT_ROOT/commands"
fi
3) A startup script.
Since we’re all on Macs, we wrote some AppleScript that sets up iTerm with all the things we need.
# $PROJECT_ROOT/bin/setup_term
osascript <<EOD
tell application "iTerm"
activate
set myterm to (make new terminal)
tell myterm
set redis_session to (make new session at the end of sessions)
tell redis_session
exec command "/bin/bash -l"
set name to "Redis"
write text "current && start_redis"
end tell
set server_session to (make new session at the end of sessions)
tell server_session
exec command "/bin/bash -l"
set name to "Server"
write text "current && server"
end tell
set faye_session to (make new session at the end of sessions)
tell faye_session
exec command "/bin/bash -l"
set name to "Faye"
write text "current && start_faye"
end tell
end tell
EOD
With all of these, this is how I start my machine in the morning.
# Open iTerm
current && bin/setup_osx_term
Got any ideas on how to make this even better? Feel free to throw some comments down below.
About the Author