Report abuse


			
##
# Task is an easy Mongrel controller.  Intended as an easy and standard Mongrel wrapper for Ops and development.
# Capistrano will not call this directly.

namespace :util do
  namespace :mongrel_init do
    task :setup => :methods do |task|
      ##
      # Constants.
      APPLICATION_BASE_DIR  = FileUtils.pwd
      APPLICATION_DIR_NAME  = File.basename(FileUtils.pwd)
      APPLICATION_NAME      = String.new
      if APPLICATION_DIR_NAME.match(/^\d+$/)
        if File.exists?("#{RAILS_ROOT}/config/deploy.rb")
          File.open("#{RAILS_ROOT}/config/deploy.rb", 'r') do |f|
            until f.eof do
              line = f.readline.chomp
              APPLICATION_NAME = line.split[2].gsub(/\"/, '') if line =~ /:application,/
            end
          end
        end
      else
        APPLICATION_NAME    = APPLICATION_DIR_NAME
      end

      ##
      # Do not run as root.
      raise("FATAL: Task (#{task.application.top_level_tasks}) should _not_ run as root!") if Process.uid == 0
    end

    task :methods do
      def run_command(*args)
        cmd     = args.join(" ")
        status  = system(cmd)
        check_exit_status(status, cmd)
      end

      def check_exit_status(status, cmd)
        unless (status and ($?.exitstatus == 0)) then
          raise("FATAL: Problem executing (#{cmd})!")
        end
      end
    end

    desc "Name of application."
    task :name => :setup do
      puts APPLICATION_NAME
    end

    desc "Start Mongrel Cluster on the app."
    task :start => :setup do
      mongrel_clean = true
      run_command(MONGREL_RAILS_COMMAND, 'cluster::start', '-C', MONGREL_CONFIG_FILE)
    end

    desc "Restart Mongrel Cluster on the app."
    task :stop => :setup do
      run_command(MONGREL_RAILS_COMMAND, 'cluster::stop', '-C', MONGREL_CONFIG_FILE)
    end

    desc "Restart Mongrel Cluster on the app."
    task :restart => :setup do
      run_command(MONGREL_RAILS_COMMAND, 'cluster::restart', '-C', MONGREL_CONFIG_FILE)
    end
  end
end