tmuxinator

前一陣子逛到 tmux 的官網,看到一個tmuxinator連結。 好奇之下點進去用,真的是驚為天人!!

簡單的說就是一個管理tmux session的工具。想像一下下面的情境:

 開發rails 專案

我們的 tmux環境可能會是:

  1. session 1:  vim
  2. session 2 :  rails s
  3. session 3:  git(pull)

這時候每次重開機(或是當機)就很麻煩,要全部手動來一次。有了 tmuxinator 你再也不用怕了!!

1. 安裝

gem i tmuxinator

2. 建立一個專案的設定檔

tmuxinator new project_name

他會建立一個 ~/.tmuxinator/project_name.yml 設定檔,不過呢,我裝的版本好像有點問題沒有自己建立 ~/.tmuxinator ,阿反正就自己開一下。然後有時候editor會有點問題,那就自己 vim  ~/.tmuxinator/project_name.yml 吧!!

裡面的設定大概長這樣

# ~/.tmuxinator/vote.yml
# you can make as many tabs as you wish…

project_name:  abc
project_root: ~/projects/abc/src
rvm: 1.9.2
pre:
tabs:
- editor:
layout: main-vertical
panes:
- vim -S session.vim
- #empty, will just run plain bash
- server: rails s
- logs: tail -f log/development.log
- console: rails c

(格式跑掉了,請去官網看好勒~~)

這設定其實很簡單。pre: 後面接的是預執行的指令:(ex:如果是php的話可能會是啟動apache server)

再來tabs底下第一個session 的名字叫做 editor, 然後有分割視窗(!!), 第一個分割視窗透過vim 的session記錄功能打開之前的檔案。第二個分割視窗則是留一個空白的shell

第二個session的名字叫做server,執行  rails s 指令叫起伺服器  …..

——-

要啟動專案只要鍵入   mux start project_name 即可。剩下的請看官網囉!!

超讚的

activerecord & php

最近在研究 yii,因為前一陣子用cakephp 有點感覺不順,尤其是 model 之間的關係對應。這幾天看了yii 才發現,應該是php/ruby 語言的差異。

看一下 rails裡面的定義這樣寫:


class Project < ActiveRecord::Base

belongs_to              :portfolio

has_one                 :project_manager

has_many                :milestones

has_and_belongs_to_many :categories

end

cakephp 裡面是這樣:


class User extends AppModel {

var $name = 'User';

var $hasOne = 'Profile';

var $hasMany = array(

'Recipe' => array(

'className'  => 'Recipe',

'conditions' => array('Recipe.approved' => '1'),

'order'      => 'Recipe.created DESC'

)

);

}

yii 裡面長這樣(定義在函式裡面):


public function relations()

{

return array(

'author'=>array(self::BELONGS_TO, 'User', 'authorId'),

'comments'=>array(self::HAS_MANY, 'Comment', 'postId',

'order'=>'comments.createTime'),

'tagFilter'=>array(self::MANY_MANY, 'Tag', 'PostTag(postId, tagId)',

'together'=>true,

'joinType'=>'INNER JOIN',

'condition'=>'tagFilter.name=:tag'),

);

}

我個人是覺的 rails 的最直覺 cakephp次之, yii 的則稍嫌麻煩了些。不過我覺的這php用hash實做起來不太順….。不知道其他框架有沒有別的實做方式就是了

撰寫rake

在rails的框架中有一個超好用的的工具叫做rake,透過它你就可以很輕鬆地清掉log,操作資料庫的版本…..之類的。簡單的說可以把它想成是在rails 中的shell !!!!

如果你在一個rails的專案中打 rake -T  就會看到所有工作的列表,我常用的就是 rake log:clear 跟 rake db:drop , rake db:migrate ….之類的。

但是有時候我們還是會有一些想要擴充的功能,這時候,你就可以自己寫一個rake task !!!!!

目錄在  RAILS_ROOT/lib/tasks/  你可以寫一隻hello.rake 放到底下,內容大概像這樣:

namespace :yournamespace do
desc “clean log,upload file, and tar file"
task :yourtaskname => :environment do |t|
puts “hello world"

end
end

首先你要有一個namespace(可有可無,但為了避免衝突還是加上的好),然後底下 寫下描述 然後緊接著 taks的區塊。  如果你有很多task 可以都仿照這種架構建立。不過挺建議分隔個別的檔案,比較一目了然。

之後在專案的目錄底下打上  rake yournamespace:yourtask 就可以看到 hello world 了!!

目前跟朋友們正在寫一個網站,可是自己的git service 好像不像svn那麼好架@@,然後還沒到可以放在github的階段,所以只好先每天tar起來 然後交給某一個人merge(好啦 我之後會學習如何透過email 來交換git 檔案) 所以就寫了一個task 他會先把log,tmp file 跟上傳的檔案清除。然後再tar 起來。 有需要的可以拿去改一改~~~~