2007年9月2日 星期日

Ruby on Rails 與 ruby-postgres

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,才能讓解答的人知道是啥狀況。

1 則留言 :

  1. 自從在kiwi這邊,看到一篇postgreSQL的文章,並且連結到了中文的PostgreSQL blog之後,才開始注意PostgreSQL,我想它是讓我們脫離被Oracle賺錢的一個好DB,有時候覺得台灣人過分的相信品牌,不斷的用產品去兜解決方案,而不是針對問題去提出解法。
    然後這篇的寫法,就是我覺得Blog寫技術文章的一個比較好的形式。列出人家寫好的文章,在基於這些文章去補充。

    論壇發問,我是覺得好像它們沒有盡力的試著解決問題,只有努力想過還是不會,然後上來發問,得到解答,這樣能獲得的知識才是最多的。以上次scaffold的來說,video也沒重看一遍就發問了,他要的答案都在他自己po的video上。

    回覆刪除