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
接続(アタッチ)する
tmux attach -t redmine