community engine

剛剛把rails 的一個plugin-community engine 給裝起來用用看。這個plugin特殊在他可以是一整個網站,也可以透過plugin的模式寄生在宿主的project中。 他的plugin 模式其實就是把原本的網站裝到 vendor/plugin/community_engine 然後透過一些設定讓plugin裡面的網站可以伸出頭來呼吸。  rails 真的很猛…..

最近跟朋友都在研究這一堆plugin,收穫頗豐呢!

廣告

bundle-fu

via:bundle-fu

這個RoR的plugin看起來很棒。我們一般在寫網頁的時候都會依照每一個網頁的需求include 不同的css/js 檔案。例如說,我們有一個main.css 掌控基本的設定,但是在產品檢視頁面可能要include 特定的 product.css/js

不過如果檔案一多的話,connection 開開關關的就會讓網頁變得比較慢才下載完成(不管大小)。所以最佳化的手冊都會告訴我們減少額外include 的檔案數量。

簡單的說,他會把你在網頁中include 的 js/css 各包成一個檔。使用上也很簡單,原本是這樣寫:

<%= javascript_include_tag “prototype" %>
<%= stylesheet_link_tag “basic.css" %>
<%= calendar_date_select_includes “red" %>
<script src="javascripts/application.js" type="text/javascript"></script>

裝了這個plugin之後,只要改成這樣寫:

<% bundle do %>
<%= javascript_include_tag “prototype" %>
<%= stylesheet_link_tag “basic.css" %>
<%= calendar_date_select_includes “red" %>
<script src="javascripts/application.js" type="text/javascript"></script>
<% end %>

最後html的頁面就會被個包成一個檔。像是這樣:

<script src="javascripts/cache/application_bundle.js?1193283359″ type="text/javascript"></script>
<link rel=’stylesheet’ href="javascripts/cache/application_bundle.css?1193283359′ type=’text/css’ />

看起來真的很棒阿 😛

在ROR中產生RSS

其實很簡單,請參考 HowtoGenerateARSSFeed 這篇。我是用第一種用法,看起來大致上就夠了。不過有幾點要注意一下。

1. @headers[“Content-Type"] = “application/xml" 要改成 headers[“Content-Type"] = “application/xml"

2. 如果有中文字都會被escaped掉。

例如標題是:測試,直接打開xml來看就會變成:escaped.png

瀏覽器打開來看是正常啦,可是我個人不是很喜歡這樣…,所以有幾種可行的方式可以處理。

1)第一種就是封在CDATA! ex:

xml.title{ xml.cdata!(“測試") }

那生出來的內容就不會幫你做處理(阿就都包在[[CDATA! 裡了阿)。

2)第二種就是使用 << 運算子 讓ror 內帶的rexml Builder知道要掠過這段處理。 ex:

xml.title do
xml.<<“測試"
end

這樣就可以了,不知道還有沒有更好的方法@@,原本xml builer 裡面是寫可以建立的時候給定 escape_attrs 這個參數。不過嘛…裡面也說這個參數不建議使用了。 其實這兩個方法應該可以一起使用,一般來說(RSS2.0),title的值都是已經濾掉html tag 的東東,所以就可以使用第二種方法。

description中的話,也可以自己濾掉後用CDATA封起來。但是在<content:encoded>中濾掉html tag 的話就不是很好了阿….,所以就可以使用第一種方法來維持原有的樣式。

[ror]使用rmagick縮圖

適用版本:RMagick 1.14.1 binary gem for Ruby 1.8.5

奇怪語法好像改變了,現在使用

img = Magick::ImageList.new(“filename")

會出現什麼 can’t convert string to integer …. 的錯誤,查了官方的api,這樣用法沒錯阿….,不知道是啥鬼問題,不過現在沒那美國時間去追程式碼。我猜可能是版本的問題吧,反正現在要縮圖的話,可以用下列的語法。

img = Magick::Image.read(“filename").first # 因為 可以讀入很多圖檔,所以傳回值是一個陣列
thumbnail = img.thumbnail(width,height)
thumbnail.write(“filename")

要注意的是如果你縮圖存在別的目錄,那麼那個目錄要先存在喔。

[ror]acts as taggable

最近要做個網站,在ror 跟wicket中看了看還是挑了ror,一方面是時間不太夠,ror可以幫助我用最快的速度把這個網站做出來。另一方面就是:反正套頁都是我們這些寫程式的在套,wicket那漂亮的樣板系統也用不太到啦@@

這個plug in可以讓ror的網站,以飛快的速度擁有可以對物件下tag的能力。這是其他framework望塵莫及的地方阿!!!

不過原始的這個套件找不太到了,找到還有點問題。 首先我打

ruby script/plugin install acts_as_taggable

唔,找不到這個plugin…,到官方的wiki上找到官方的svn 裡面也沒有這個套件了…找了好久,一種解決方法是打

ruby script/plugin discover

讓ror 找到更多套件庫的位置,但是抓下來裝的有問題阿…orz 找不到加tag 的method….

所以,只好繼續找,終於找到這套,抓下來的時候會同名,但是是後來改寫過的:Acts As Taggable On Steroids

安裝要這樣:

ruby script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids

其他使用方面改變不大,但是現在設定tag後,要記得 object.save才會更動到資料庫裡(效能考量吧,我想)。