cache_fu, memcached, 與Locomotive的問題
近兩個星期開始替專案中大大小小的部份加上 memcached 的支援,配合了 cache_fu 這個方便的 Rails plugin,寫起來順利不少。但在 Mac 上執行起來倒是碰到一個問題。由於使用 Mac,最方便的 Rails 懶人安裝包,便是使用 Locomotive,以及它內附的一大票 rubygems。但我們使用 cache_fu 的 model 裡,卻老是出現這樣的錯誤訊息:
protected method `send' called for #<MemCache:0x3388db4>
基本上就是說,MemCache 這個 class 的 send 方法是被定義為 protected method,因此不能呼叫。怪哉,send 在 ruby 語言中,乃是非常基層的方法,每個物件皆有,怎有可能被定義為 protected ?一查之下果然發現元兇,乃是 Ruby-MemCache 這包 rubygem。
Locomotive 裡附了兩套關於 memcached 的 rubygem,其一是 Ruby-MemCache,其二則是 memcache-client。也許是為了方便而兩者皆附,但 cache_fu 所需要的,其實是後者。但在兩者皆有的狀態下,require “memcache”永遠是載入 Ruby-MemCache 裡面的 memcache.rb。而在此檔中,竟然將 send 方法蓋寫。不知該說是其作者大膽豪放,或是該說其迷糊不清,著實令人稱奇。
於是解決這問題的方法便呼之而出了:
gem uninstall Ruby-MemCache
也就是,將 Locomotive 裡附的 Ruby-MemCache 這包 rubygem 移除便是。
可見,若不希望自已寫的函式庫被反安裝,相容性很重要啊。
About this entry
You’re currently reading “cache_fu, memcached, 與Locomotive的問題,” an entry on Handlino
- Author:
- gugod
- Published:
- June 29th, 2007 / 2am
- Category:
- Rails
- Tag:
- cache_fu, locomotive, memcached, rails
No comments
Jump to comment form | comments rss [?] | trackback uri [?]