Posts Tagged ‘Ruby on Rails’

在Linux上建立Ruby on Rails環境

Wednesday, June 11th, 2008
Step 1. 安裝Ruby

請參考 http://wiki.arch.nctu.edu.tw/LearningRuby/Install
http://www.ruby-lang.org 尋找最新版的 Ruby 原始碼,編譯與安裝步驟:
1. 執行configure
2. 執行make
3. 執行make install

Step 2. 安裝RubyGems

請參考 http://www.rubyonrails.org/down
Download RubyGems
1. 解壓縮
2. 執行 “ruby setup.rb”

Step 3. 安裝Rails

gem install rails –include-dependencies

Step 4. 安裝需要的Plugin

1. Mongrel:
gem install mongrel

2. Mongrel Cluster:
gem install mongrel_cluster

3. will_paginate:
gem install will_paginate

4. reverse_proxy_fix plguin:
到rubyapp目錄下
ruby script/plugin install http://svn.napcsweb.com/public/reverse_proxy_fix
Note: 這個plugin只會在production模式下才會作用!

其它參考

.Ruby on Rails 伺服器架設原理
.Apache 2.2 + Mongrel 設定方式

Model Object Relationship Map

Wednesday, May 7th, 2008

Model Relationship Picture
之前在學Ruby時,看到書上有像上面這種Model關係圖。在還沒開始進到我現在的這間公司前,其實我連什麼是MySQL、Oracle都不知道,也從沒下過SQL語法存取DB。大學時,修的課程裡,其實大多跟現在會用的東西都沒什麼關係。除了一門資料結構的課程和計概學的C語言比較有幫助外,其它像什麼組合語言、IC邏輯設計…etc.現在根本沒在碰。後來想想其實我的興趣應該是寫軟體的,應該去讀資工才對。Any way,這些都是題外話。我要說的是,由於以前從沒學過這方面有關資料模型的東西。所以在寫一個新的網頁程式時,都不會先去想資料模型彼此的關係,即使進公司已經寫了3年的Java。

這次學Ruby on Rails時,很認真的把這兩本書看完。
9789866840128 9867794923
而在Ruby on Rails建置與執行這本書中,作者為了要說明範例程式的設計概念,便使用了類似上面的資料模型圖。知道可以用資料模型圖去描述物件的關係後,我便試著在開發新網頁程式時使用看看,邊想邊畫。經過了一段時間的演練,發現透過模型圖,可以在程式開發初期就想好物件之間的關係結構。之後真正coding時,邊看圖邊寫,比邊想物件關係邊寫來的更清楚也更快。真是非常好的磨練。忽然間,感覺程式功力又增進了不少,彷彿像玩魔獸學到一個強力新技能般 XD。所以在這裡介紹一下這張圖的概念,希望有志成為一個死阿宅的工程師們,也可以學學 ^^

想像你要做一個討論區的Web Site。一個討論區有什麼? 使用者帳號是一定要的,right? 再來是討論區一定可以寫文章,可以回文。一篇文章中可能還可以夾圖片,還有下標籤。光看這樣的描述,有可能會想到5個模型。不過我打算將回文(Comment)也算成是文章(Post)的一種,Comment可以當成是有parent的Post物件。接下來,開始分析這4個model的關係:
一個帳號(Account)會有許多篇文章(Post)
一篇文章(Post)會有許多回文(Post)
一篇文章(Post)會有許多圖片(Image)
一篇文章(Post)會有許多標籤(Tag)
一個標籤(Tag)會有許多文章(Post)

首先,一個帳號會有許多文章,代表Post是「屬於」Account所有。所以會有個箭頭從Post指向Account。

再來,一篇文章會有許多回文,代表Post的不同instance間有關係串聯。所以圖中Post Model那裡,會有個箭頭指到自己。

一篇文章會有許多圖片,就像第一個描述類似,Post「擁有」Image。所以會有個箭頭從Image指向Post。

最後,一篇文章會有許多標籤,同時,一個標籤會有許多文章。所以這兩個Model互相擁有彼此,因此有個雙向箭頭在Post及Tag中間串聯。

短短幾分鐘內便把相關的Model關係想好並畫出來。之後真正開始寫code時,只要照著這張圖實作出來即可。這樣一來可以有效降低出錯的機率。當然如果中間想到一些idea,想要臨時加新的Model,也可以直接畫在關係圖裡,只要確保關係正確即可。其實像這種簡單的物件關係,還看不出來這圖好用的地方。說真的要邊做邊想,也不是什麼難事。但如果換成是一個有20種以上的物件、關係複雜的程式呢? 邊做邊想? 也可以啦,只要你的腦頭夠清楚、記憶力夠好也是沒問題的啦… XD

Ruby on Rails Tips

Monday, May 5th, 2008
  1. Session只能存4KB以下的資料,所以請不要存整個object data到session裡。否則在production mode下跑時可能會出現500 Error
  2. cross site做AJAX POST request時會出現ActionController::InvalidAuthenticityToken的error。原因是Ruby本身有request保護機制,會去檢查授權的token值。如果要能work請參考:
    http://ryandaigle.com/articles/2007/9/24/what-s-new-in-edge-rails-better-cross-site-request-forging-prevention。其中一個最簡單的方式是加入這行skip_before_filter :verify_authenticity_token到controller的class開頭,則ruby會略過request token的檢查機制。
  3. 在development mode收到request時,controller class會自動reload
    所以class variable(@@xxxx)作用時不會像static variable(in Java, C++)一樣
  4. 如何切換到production mode? 在environment.rb裡加入這行:
    RAILS_ENV = ‘production’ (舊寫法ENV['RAILS_ENV'] ||= ‘production’已不可用)
  5. 如何include槽狀module?
    例如,我想要在controller裡使用ActionView > Helpers > TagHelper > escape_once這個function
    則在class開頭定義:
    include ActionView
    include Helpers
    include TagHelper
  6. 如何在view中escape字串?
    1. 用<%=h xxxx %> 將整個文字輸出都做escape
    2. 使用escape_once(xxxx),可以將指定的字串做escape
    用第2個方法的時機是有時後你只想escape部分的文字或者文字是被帶在參數裡,例如:
    <%= link_to escape_once(t.name), {:action => “test”, :tag_id => t.id} %>
  7. 如何將時間顯示為yyyy-mm-dd hh:mm:ss格式?
    <%=h announce.created_at.to_s(:db) %> #=> 2008-05-06 17:12:52
    這個方法看起來會依據資料庫的種類而不同,我是用MySQL,所以其它的就不保證一樣了
    1. last updated at 2008-05-06