Rails lib加载顺序

时间:2013-03-23 19:36:43

标签: ruby-on-rails ruby ruby-on-rails-3

我的应用程序li​​b目录中有以下类:

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

之前加载

需要在ga_proxy.rb

之前加载proxy.rb

但是如果在ga_proxy之前加载metrics.rb,那么我得到'类GaProxy'的超类不匹配',因为已经定义了没有父类的GaProxy。

如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:1)

application.rb文件中,按顺序指定要加载的每个文件:

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

答案 1 :(得分:0)

我从未遇到过这个问题,但为什么你不能在配置/初始化程序中执行以下操作

创建文件config / initializers / libs.rb

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

答案 2 :(得分: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