3/31/2008

Rails 2.0 使用 Big5 編碼

沒想到我的有生之年居然還會使用到 Big5!!!

沒錯,基於機緣巧合,我碰到了一個需要使用 Big5 資料庫,網頁也是 Big5 顯示的request。所以我必須匿天而行,強迫 Rails 2.0 使用 Big5。方法很簡單,

config/enviroment.rb 裡面加入
config.action_controller.default_charset = "Big5"

config/database.yml記得加入
development:
host: xxx
adapter: mysql
database: lala
port: 3306
username: root
password:
encoding: Big5

Html 記得加入
<meta http-equiv="content-type" content="text/html;charset=Big5" />

大概就這樣吧,我抱著參觀懷舊的心情來寫這個網頁 XD

3/20/2008

Rails 2.0 比起 Rails 1.2 加速不少

好像是一個對岸人赖洪礼 在自己 blog 發表一篇壓力測試。他發現到 Rails 2.0 比起 Rails 1.2 加速不少,大概是 30%~50%。不過,他的測試方式相當的原始,用 ab 去量 scaffold 頁面的 req/sec。所以數字比例根本不能做准。

但是,至少說明 Rails Team 有在為了 performance 盡力,並且有實際的成果。

3/15/2008

Netbeans 6 相當的威

前陣子需要一個 IDE 來教課,需求如下



  1. 好安裝


  2. 跟 Rails 整合良好


就選了 Netbeans 6 來試試看,結果發現真的還蠻不錯的,因為都是 Sun 的東西,所以直接跟 jruby 有很好的整合



  • Navigation 還不錯用,可以直接跑到這個 Controller 相關的 View,或是這個 View 相關的 Controller ,也可以指到這個 Class 宣告的地方。


  • 內建 svn ,也比 Eclipse 還得裝 SubEclipse 來的方便。


  • 內建 jruby ,也可以直接包成 war file


  • Find Usage 可以找出所有使用這個 class 的程式碼所在,主要找出所有使用這個 Model 的 Controller 列表


  • 內建 mysql GUI Tool


  • Code Hint 超棒


最重要的是,他可以直接把 Model 對應到 attribute 給取出來


activerecord6.png


Product Model 裡面有 description,image_url ... title 等 table column ,Netbeans 6 可以直接取出來放到 code hint 裡面去。這樣就省了點找 db column 的時間了。不過這個功能必須使用 migration ,或是將 db schema dump 到 schema.rb 才可以用,也就是說不是 live db connection 去取 schema 啦。


Netbeans 6 最大的缺點就是速度太慢了.......,不過 6.1 Beta 已經改善了不少。大家可以試試看。


不過我的話,還是 vim 無敵呀。Navigation 用 gf 可以直接跳來跳去,Find Usage 可以用 grep -r --color Patern dir 來取代, 取出 db schema 可以直接用 mysql client + explain db schema 來做到。鍵盤還是真正的王道。




3/09/2008

Rails PUSH Server :Juggernaut 簡介

早就想寫 Juggernaut 的文章了,不過今天是第一次有時間寫。Push Server 技術就不再提了,想知道可以看我之前寫的文章。

簡介

Juggernaut 簡單的來說,是一個 Ruby Push Server 加上 Rails Plugin。

Push Server 取名就叫作 Juggernaut。

Juggernaut 的 Rails Plugin 裡面包含了一些 JS,跟Juggernaut 自己開發的 Flash Client。Push Server Client 端通常需要 Flash 來接收 Push Server Message,Juggernaut Flash Client 是使用 Flash 8 來作開發。支援 IE ,Firefox,Safari。Juggernaut 的強項在於跟 Ruby on Rails 整合良好,我們來看看怎麼使用。

安裝

1. Push Server 安裝

gem i juggernaut -y

2. Rails Plugin 安裝

ruby script/plugin install http://juggernaut.rubyforge.org/svn/trunk/juggernaut


設定

1. Juggernaut_hosts.yml

這裡很容易混淆,這個設定檔是 Rails Plugin 要看的設定檔,如果沒有設定 config/juggernaut_hosts.yml,會導致 Rails 無法啟動,所以必須要設定 config/juggernaut_hosts.yml。請先新增一個 config/juggernaut_hosts.yml ,輸入你的 Push Server 環境

:hosts:
- :port: 5001
:host: localhost
:environment: :production

port 是 push server port ,預設是 5001,Host 是 Push Server 的 IP ,Enviroment 是 Rails 環境。

2. juggernaut.yml

我們用 juggernaut 來產生 juggernaut push server 所需的設定檔。以下指令會產生一個 juggernaut config 檔,取名叫作 juggernaut.yml。

juggernaut -g juggernaut.yml

啟動

要啟動就是要啟動 Push Server ,還有 Ruby on Rails 。
1. 啟動 push server
我們啟動 juggernaut 這個 push server,並且讀取 config 檔。 預設 Push Server port 是 5001,可以到 juggernaut.yml 去修改。
juggernaut -c juggernaut.yml

範例

我們直接用 juggernaut 的範例,聊天室來確認是否 ok。在你的 controller 裡面創立兩個 function
def index

end

def send_data
render :juggernaut do |page|
page.insert_html :top, 'chat_data', "
  • #{h params[:chat_input]}
  • "

    end
    render :nothing => true
    end
    然後在 index view 裡面這樣寫
    <html>
    
    <head>
    <%= javascript_include_tag :defaults, :juggernaut %>
    <%=
    juggernaut %>
    head>
    <body>
    <%= form_remote_tag( :url => { :action => :send_data }, :complete => "$('chat_input').value = ''" ) %>
    <%= text_field_tag( 'chat_input', '', { :size => 20, :id => 'chat_input'} ) %>
    <%= submit_tag "Add" %>
    < /form>
    < id=""chat_data" style="list-style:none"> ul>
    body>
    html>
    這樣聊天室就完成啦,可以試試看玩玩看。

    對了,這個聊天室一開始有一堆 alert message,這是 Juggernaut 預設 Development 環境下會啟動 Debug Function ,只要 config 改成 Production 就不會出現一堆 alert message。

    3/05/2008

    Ebb:又來一個的 Application Server

    這年頭發展 Application Server 好像很有搞頭,也或許是 Rails 社群對 Zed Shaw 的高調離去的反撲。總之,2008 年一月出了 Thin,二月出了SwitchPipeSwiftiply,現在又有一個 Rails App Server Ebb 出了,而且好像真的很有料。




    ebb-concurrency.jpg


    上面這張圖是 ebb 跟 Mongrel ,和 Event-Driven Mongrel,Thin 的負載程度 benckmark。我們可以發現 ebb 跟其他的 Rails App Server 根本就是不同等級的負載程度。他的 Design 架構上面比較像 Event-Driven Mongrel,差別比較大的就是他很多地方用 c 寫成。


    安裝方式


    gem i ebb


    記得先安裝 glib2。


    跑的方式


    ebb_rails start


    很熟悉的指令。


    測試一下好了。