2012-01-17 85 views
3

我在rails 3.1中安裝了一個新的gem針。needle/definition-context.rb:36:warning:undefining`initialize'may cause serious problems

它正確安裝,但是當我使用命令rails server --debugger

我碰到下面的警告開始我的軌道:

.rvm/gems/ruby-1.9.2-p290/gems/needle-1.3.0/lib/needle/definition-context.rb:36: warning: undefining `initialize' may cause serious problems 
.rvm/gems/ruby-1.9.2-p290/gems/needle-1.3.0/lib/needle/definition-context.rb:36: warning: undefining 'object_id' may cause serious problems 
.rvm/gems/ruby-1.9.2-p290/gems/needle-1.3.0/lib/needle/definition-context.rb:36: warning: undefining '__send__' may cause serious problems 

我怎樣才能擺脫它?

回答

7

問題出在針狀寶石本身。它這樣做是:

public_instance_methods - 
[ "instance_eval", "object_id", "__id__", "__send__", "initialize", 
    "remove_const", "method_missing", "method", "class", "inspect", "to_s", 
    "instance_variables", "block_given?" ] 

但是在Ruby 1.9的public_instance_methods方法返回的Symbol品種,不String對象。所以會發生什麼有效的是這樣的:

[:__send__, <and other methods>] - ["__send__", <and other methods>] 
=> [:__send__, <and other methods>] 

當它應該是不刪除所提供的Array那些方法。

這表明該庫尚未更新(或至少測試過)Ruby 1.9。我會建議找到這個庫的代碼,分叉它,然後應用一個補丁,使用類似map(&:to_sym)這樣的東西來將數組轉換爲符號來解決這個問題。

但請注意:可能存在1.8和1.9之間存在這些差異的其他情況。

+0

這支隊伍力量強大。 – 2012-01-17 07:30:35

+0

謝謝Rayn ......這真的有道理! – 2012-01-18 05:59:08