Skip to content

Instantly share code, notes, and snippets.

@csexton
Created June 10, 2011 21:05
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save csexton/1019777 to your computer and use it in GitHub Desktop.
Zsh function to restart an app running under pow
# Restart a rack app running under pow
# http://pow.cx/
#
# Adds a kapow command that will restart an app
#
# $ kapow myapp
#
# Supports command completion.
#
# If you are not already using completion you might need to enable it with
#
# autoload -U compinit compinit
#
# Changes:
#
# Defaults to the current application, and will walk up the tree to find
# a config.ru file and restart the corresponding app
#
# Will Detect if a app does not exist in pow and print a (slightly) helpful
# error message
rack_root_detect(){
setopt chaselinks
local orgdir=$(pwd)
local basedir=$(pwd)
while [[ $basedir != '/' ]]; do
test -e "$basedir/config.ru" && break
builtin cd ".." 2>/dev/null
basedir="$(pwd)"
done
builtin cd $orgdir 2>/dev/null
[[ ${basedir} == "/" ]] && return 1
echo `basename $basedir | sed -E "s/.(com|net|org)//"`
}
kapow(){
local vhost=$1
[ ! -n "$vhost" ] && vhost=$(rack_root_detect)
if [ ! -h ~/.pow/$vhost ]
then
echo "pow: This domain isn’t set up yet. Symlink your application to ${vhost} first."
return 1
fi
[ ! -d "~/.pow/${vhost}/tmp" ] && mkdir -p "~/.pow/$vhost/tmp"
touch ~/.pow/$vhost/tmp/restart.txt;
[ $? -eq 0 ] && echo "pow: restarting $vhost.dev"
}
compctl -W ~/.pow -/ kapow
@csexton
Copy link
Author

csexton commented Jun 10, 2011

The biggest problem I had with this was if the app was not symlink'd in pow at all, it would create the directory with mkdir -p -- I addressed this in 70dbb4.

@johnantoni
Copy link

you could also add a command separately to "pow" an app if it hasn't been already

powit(){
    local basedir=$(pwd)
  local vhost=$1
  [ ! -n "$vhost" ] && vhost=$(rack_root_detect)
  if [ ! -h ~/.pow/$vhost ]
    then
        echo "pow: Symlinking your app with pow. ${vhost}"
      [ ! -d ~/.pow/${vhost} ] && ln -s $basedir ~/.pow/$vhost
    return 1
  fi
}

@martinmose
Copy link

Thanks for sharing, that was really helpful :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment