tmuxでrailsプロジェクト用のセッションを作成するRake

Rakeを書いてみた

#encoding: utf-8

desc 'redmine project'
task :redmine_project do
  session_name = "redmine"
  root_dir = "~/code/rails2/redmine-1.0.3"
  
  sh "tmux new-session -d -s #{session_name} -n root" unless has_session?(session_name)
  sh "tmux new-window -d -k -t #{session_name}:0 -n root"
  sh "tmux new-window -d -k -t #{session_name}:1 -n console"
  sh "tmux new-window -d -k -t #{session_name}:2 -n log"
  sh "tmux new-window -d -k -t #{session_name}:3 -n server"

  # for all window
  cmd = "cd #{root_dir}; clear"
  send_keys_for_all_window(session_name, cmd)

  cmd = "rvm ruby-1.8.7@rails2.3.5; clear"
  send_keys_for_all_window(session_name, cmd)

  # for console window
  sh "tmux send-keys -t #{session_name}:1 'ruby script/console' C-m"

  # for log window
  sh "tmux send-keys -t #{session_name}:2 'tail -f log/development.log' C-m"

  # for server window
  sh "tmux send-keys -t #{session_name}:3 'ruby script/server' C-m"
end

def has_session?(name)
  sh "tmux has-session -t #{name}" do |ok, res|
    return ok
  end
end

def window_list(session_name)
  `tmux list-window -t #{session_name} | cut -d : -f 1`.split("\n")
end

def send_keys_for_all_window(session_name, cmd)
  window_list(session_name).each do |win_num|
    sh "tmux send-keys -t #{session_name}:#{win_num} '#{cmd}' C-m"
  end
end

Rake実行

rake redmine_project

やっていること

redmineプロジェクト用のセッションを作成

 既にセッションが作成されていればそのセッションをそのまま利用する。

rootウィンドウを作成

 ウィンドウ作成後、rootウィンドウで以下のコマンドを実行する。


$ cd ~/code/rails2/redmine-1.0.3 # プロジェクトディレクトリへ移動
$ rvm ruby-1.8.7@rails2.3.5 # ruby&railsバージョンを切り替え

consoleウィンドウを作成

 rootウィンドウ同様、ウィンドウ作成後にコマンドを実行する。


$ cd ~/code/rails2/redmine-1.0.3
$ rvm ruby-1.8.7@rails2.3.5
$ ruby script/console

logウィンドウを作成

 以下、同様


$ cd ~/code/rails2/redmine-1.0.3
$ rvm ruby-1.8.7@rails2.3.5
$ tail -f log/development.log

serverウィンドウを作成

 以下、同様


$ cd ~/code/rails2/redmine-1.0.3
$ rvm ruby-1.8.7@rails2.3.5
$ ruby script/server

接続(アタッチ)する

tmux attach -t redmine