9月 26
在Web Service, Ajax, Web 2.0, REST等Web應用與技術話題熱潮,帶動許多第二代的Web開發技術成長之後,這些話題也漸漸地消退。不過許多人可能不曾發現,其實這些技術名詞,是在慢慢地顯露一點:Web應用程式逐漸從Server Side轉移到Client Side,也就是瀏覽器身上。
本篇文章要從以往的Server Side Web應用程式,其開發方式與演進來介紹Single Page Application(SPA) 與現今所有主流Web技術。
我在Web 2.0過去,現在與未來及介紹Ruby On Rails都有提到一些Web技術的演進,比較明顯的趨勢就是從靜態到動態頁面,而設計的方式也更程式化。而在http://atedev.wordpress.com/2007/01/09/Web2.0:過去,現在及未來也有讀者在前言提到,技術並不是將一個名詞安上去就好。我相當贊同這句話,因此也在這篇文章中希望來做個總整理,以技術及歷史來看看Web是怎樣成長的。
Web應用程式的演進
動態網頁
儘管Web並不是一個三言兩語能拿個版本號碼來解釋,但實際上Web技術確實有些明顯的分隔點。
最早期我們熟知的就是靜態網頁,這應該沒啥問題。儘管在2000前,php,asp就開始流行,坊間的書上也都稱之為動態網頁。而我在此提及的動態網頁程式,實際上卻是從php4釋出的那一年開始(註釋)。這邊要讓大家瞭解的分界點,其實是php4開始被許多商業公司所採用,而軟體的形式也更為套裝化,而不再像之前大家認定的「動態」網頁僅僅只是拿來完成一些簡單的區塊來與一般的靜態網頁整合。
在2004年的時候,Web Framework的產生,創造了Web應用程式另一個新的高峰。而在這個時候也開始有一些Rich Web Client概念的雛形了。我將Ruby On Rails定為一個分界點是因為,他顛覆了傳統動態網頁還在使用設計方式,而改用MVC。但要注意的是Ruby On Rails儘管整合了Ajax與進階Javascript函式庫,但還是沒有改變回傳完整或部分HTML的方式,意思便是HTML的產生始終在Server Side。
Continue reading »
written by Kiwi
\\ tags: ajax, javascript, json, rest, ria
9月 03
ruby-postgres
有網友與我提出Rails與PostgreSQL的問題,我就順便寫一下有關PostgreSQL的問題好了。
安裝的方式請參考
http://postgresql-chinese.blogspot.com/2007/08/windowsrailspostgresql.html
不過我在這邊順便補充,其實當初會捨棄postgres-pr還是因為效能的問題,native binding終究是比較快的。
在此先對新手說明一個觀念,如果你想一步一步玩熟Rails,最好還是多善用ruby script/console來進入Console mode。而Console其實也只是呼叫irb去載入environments.rb,這個檔案會陸續載入plugin, model及你指定在environments.rb寫的所有require。Console有兩個用途,一個是測試是否你能正常啟動Rails,第二個是測試你的Model是否正常,例如測試association。而如果console都啟動失敗,或是Model.find出來的都不是想要的,那真正啟動mongrel去跑頁面是一定不可能是對的。
而許多在windows上面安裝的人一定會遇到函式庫載入失敗的問題。 要注意的是,安裝任何mswin32的gem都是有可能出現這樣的問題的。這個時候如果你是去看rails的development.log或是看到exception,通常都還是會說是driver有問題(可能會是xxx.so載入失敗之類的),這樣是看不出來的。此時使用console,一啟動的時候他就會告訴你是啥dll無法載入。
而大家使用ruby-postgres,如果不安裝PostgreSQL Server Win32,有幾個重要的dll是不會被載入到windows裡的。這個使用請先安裝PGAdmin III,然後將他的安裝目錄裡的libpq.dll,iconv.dll,krb5_32.dll,libiconv-2.dll,libintl-2.dll,comerr32.dll至你的ruby安裝目錄下的bin即可,還是一樣先試試console能不能開吧!
Ruby的很多Win32函式庫都是用這種binding的方式,而並非是使用ruby撰寫而成的。所以如果今天是發現gettext不能用,就應該要去尋找gettext win32,然後將缺的dll複製到bin下即可。
該如何發問?
最近在論壇觀察了一下,發現Rails新手的朋友們,應該要接受一些觀念建立,以免回答的人答非所問。既然我遇到人來問問題(還好不是來踢館),也免不了要提倡一下,這觀念在任何一種程式語言都適用。
- 詳述問題:想要讓人瞭解問題,就是要說明你的目的,及你在發問之前曾經做了什麼。如果不是技術上的問題,例如是求函式庫,求解法,那更要說明清楚前因後果。
- 有Exception訊息的要貼exception:Rails當發生任何錯誤的時候,就一定是大家所熟知的畫面,「{ErrorName} in {Controller#action}」。接著就是貼ErrorName,以及下面灰色區塊裡的描述。第二個灰色區塊就是trace,如果可以的話,請 複製5~10行,如果是寄信,或發文可以不受篇幅影響,全部貼上來也無所謂。不然可是沒有人知道你在問啥的喔~
- 有畫面的請貼畫面:如果是ajax,html等其他UI上的疑難雜症,就一定要貼畫面了。然而是複雜難以解的問題,就要請你去用用fiddler了。例如有看過google maps不能用的問題,其實後來深入一看其實就是referer被擋的問題,這種狀況應該要詳細貼出http request及response,才能讓解答的人知道是啥狀況。
written by Kiwi
\\ tags: rails
8月 29
Ruby Library:
Rails Plugin:
written by Kiwi
\\ tags: rails, ruby
8月 27

在商業服務的Rails HTTP Cluster觀念及測試中,我提到了failover也是cluster的其中一個觀念。幾年前我用heartbeat,只是單純架設pgcluster的load balancer,那個時候也是簡單的active / standby。在那個時候,有這樣的架構已經減輕大部分人所遇到的問題:有一台掛掉另一台可以馬上取代其服務,讓維護者有時間可以救,使用者不會罵,已經是很偷笑的事情了。不然一般的維護者可能要急得像熱鍋上的螞蟻,拼命地輸入指令試著想要拯救資料或服務,而在數小時的工作後,服務還是救不起來,使用者罵聲四起。但是其實對我而言,這些比起硬體的方案,還是多多少少嫌不方便。
參考這個網頁,可以瞭解有那些failover的方式。
http://www.ukingdom.com.tw/pro/lifekeeper/lifekeeper.htm
先不管後面的階層化或是多方向failover,其中提到的active/active及active/standby,為啥要有這些分別呢?我來一個一個介紹。
Continue reading »
written by Kiwi
\\ tags: fail over, heartbeat, linux ha, load balance
8月 19
Rails如果運用在正式上線的服務,便是相當需要配置為Cluster(叢集)服務。不過大部分使用Rails來建立Cluster通常都是藉著Apache mod_proxy,但在一些情況之下,他只有好設定的優點而已。另一種方式是利用一些Plugin及設定去模擬Cluster的行為,不過這樣便是消耗CPU的時間。
網路上可以看見許多Cluster的文章,但多半都是介紹單方面的功能,或是許多實做的細節牽扯在一起。這篇文章用商業服務的整體規劃來看Cluster及Rails之間的種種問題與解決方法。文章後面附帶了一節是要解釋如何解讀apache menchmark的數據。而各位如果想要瞭解的是效能,數據上的差異,已經有一篇相當棒的可以參考:
http://blog.kovyrin.net/2006/08/28/ruby-performance-results/
Continue reading »
written by Kiwi
\\ tags: cluster, haproxy, load balance, rails
8月 10
儘管我是寫Rails的,寫了想想也快要一年了。東看西看都覺得這實在是一個好東西,不過反過來,當我們的服務要上線的時候。組長卻說我的benchmark test case不夠好,不能夠測出很準確的數值(或許他心想這太好了,三台準系統可以跑200多個request/sec)。
是的, 我是多半隱藏了這個缺點,甚至很不想要去說「對,他就是一個這樣慢的東西」。當一堆文章都在寫說mongrel或是lighttpd cluster有多快,我心裡總是想著apache+mod_fcgid(你知道我在說哪一個blog…XD),我們的目標是做上萬人使用的系統,總不能真的去跑mongrel吧?那跟跑webrick有啥不同?
Continue reading »
written by Kiwi
\\ tags: performance, rails
8月 06
參考文章:
http://wiki.rubyonrails.com/rails/pages/Rails+on+CentOS+4.4+with+Apache+and+FastCGI+Simply/versions/13
1. 安裝apache module
2. 安裝fastcgi
因為ruby-fastcgi建置的時候需要fastcgi的header所以得安裝
下載:
http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
BASH:
-
tar zxf fcgi-2.4.0.tar.gz
-
cd fcgi-2.4.0
-
./configure
-
make all install
Continue reading »
written by Kiwi
\\ tags: apache, fastcgi, fedora, mod_fcgid, rails
7月 16

本篇文章從PHP及Web程式設計師的角度,逐漸帶出Ruby on Rails這個Web Application Framework及其優點,架構觀念。接下來要簡介Ruby及Rails的學習重點。
Web應用程式
記得在上次的的主題,重新探討Cakephp, Ruby on Rails與MVC,我大力地闡述能否實做商業邏輯,或是掌握Model的功用是多麼的重要。而老話一句,這個問題比較會出現在中大型的Web應用程式中,如果說你正在寫的是小小的網頁作業,或許本文對你只有參考的價值。
我會這樣說,是因為我們已經邁向2008年,Web應用程式在Google大神的帶領之下 ,逐漸開始在放出光芒。
Continue reading »
written by Kiwi
\\ tags: mvc, rails, ruby
6月 13
前言
承接之前撰寫的Oracle Installation Guide,這裡要開始解釋要如何使用Ruby如何連到Oracle。
雖然Oracle支援標準SQL規格,不過還是有相當多他們自己的概念。本文章描述幾個Oracle新手會遇到的問題。
若要詳細管理你的資料庫(10gR2),請參考
http://www.oracle.com/pls/db102/homepage
或是書籍
Oracle Database 10g DBA 技術手冊
http://www.books.com.tw/exep/prod/booksfile.php?item=0010303350
Oracle Database 10g Linux 系統管理專家http://www.books.com.tw/exep/prod/booksfile.php?item=0010333657
Continue reading »
written by Kiwi
\\ tags: oracle, rails
1月 08
關於Model的問題
去年,我還在用cakephp的時候,我注意到這篇文章
http://mk.netgenes.org/archives/230/
當然那個時候,我相當贊同這篇文章的論點,也有回應他。
接著我就開始進行大概半年的專案,當然最後也有成果,我是使用cakephp,所以那個時候也有寫了這一篇。
進階php程式設計-介紹MVC與Cakephp
其中一張圖,我也有提到MVC的寫法,很明顯地我那時候還是認為Model是形同於表格的快取。之所以會這樣認為,也是跟上面的文章一樣。不能否認現在大多數做Web的都還是偏向做做網站,簡單的資料CRUD,將資料庫的資料撈進Controller,簡單地處理就可以達成需求,根本不需要啥複雜的商業邏輯。
那個時候確實知道這跟傳統的MVC觀念根本不一樣,但硬要去說不一樣不如說是一種適應在Web Framework上的變形。畢竟現在cakephp還是用這樣的方式。
我的專案雖然看起來是簡單的管理系統,但確有複雜的程序控制,資料檢查產生的商業邏輯。隨著專案進行,我逐漸發現這樣是不能解決問題的。Cakephp的Model傳回來的是Array,並不是物件,這樣讓我完全無法將商業邏輯寫在Model,在這種情況之下,Model就真的只剩下table快取的功能。
Continue reading »
written by Kiwi
最新回應