2013-03-23 110 views
2

我在我的應用程序下面的類lib目錄:Rails的LIB加載順序

proxy.rb

class Proxy 
end 

ga_proxy.rb

class GaProxy < Proxy 
    include GaProxy::Metrics 
end 

metrics.rb

class GaProxy 
    module Metrics 
    end 
end 

加載訂單顯然很重要:

metrics.rb需要ga_proxy.rb

proxy.rb需要ga_proxy.rb

之前加載但是,如果metrics.rb是ga_proxy之前加載,然後我得到「超錯配之前加載對於GaProxy類「,因爲GaProxy已經被定義爲沒有父類。

我該如何解決這個問題?

感謝

回答

1

在您的application.rb文件中,指定要按順序加載的每個文件:

config.autoload_paths += %W(#{config.root}/lib/proxy.rb, #{config.root}/lib/metrics.rb, #{config.root}/lib/ga_proxy.rb) 
0

我從來沒有過這個問題,但你爲什麼不能做以下的配置/初始化

創建一個文件配置/初始化/ libs.rb

require 'proxy' 
require 'ga_proxy' 
require 'metrics' 
0

一般來說,在Ruby中,你需要你需要在你的文件的內容:

# ga_proxy.rb 
require './proxy' 
require './metrics' 

class GaProxy < Proxy 
    include GaProxy::Metrics 
end 

這是假設的文件住在同一個目錄下。當然,Rails爲你做了一些自動加載的魔法,但你仍然可以明確你的要求。

編輯

你必須指定metrics.rb超:

# metrics.rb 
class GaProxy < Proxy 
    module Metrics 
    end 
end