将Ruby类加载到应用程序中的最佳方式是什么?

问题描述:

目前我装Ruby类为每个类文件使用需要的命令,例如:将Ruby类加载到应用程序中的最佳方式是什么?

require File.join(File.dirname(__FILE__), 'observation_worker') 
require File.join(File.dirname(__FILE__), 'log_worker') 

对于每个类我定义它需要的类。如果我可以在我的应用程序的入口处执行此操作,那将是非常好的。

是否有一种简单的方法来在应用程序的开始加载所有的Ruby类?

如果您有您的代码去,你可以指定目录路径添加到负载路径类似

$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib')) 

稍微清晰的目录结构,那么在你的代码的其他部分,你可能需要从像一个相对路径所以:

require 'observation_worker' 
require 'logger_worker' 

,或者如果你有LIB中的文件夹,你甚至可以做

require 'workers/observation' 
require 'workers/logger' 

在我看来,这可能是处理图书馆上下文中最简单的方法。

不知道我完全理解,因为你总是要告诉你的程序哪些文件需要,但你可以这样做:

Dir["#{File.dirname(__FILE__)}/*.rb"].each { |f| require(f) } 

,其中将包括来自的目录下的所有文件名为.rb当前文件。 虽然如果你开始使用RDoc,它将不会满意你。

明确列出您的需求通​​常不是一件坏事,它让其他开发人员清楚地了解您的代码正在发生什么。

正如jtzero评论,自动加载已弃用


您还需要指定哪些加载,但你可以尝试autoload

autoload :Module, "module" 

当恒定Module首先使用该文件"module"require自动天。

+1

仅供参考,自动加载是[已弃用](https://www.ruby-forum.com/topic/3036681) – jtzero 2013-07-17 16:26:51

这是我喜欢使用的选项。

http://github.com/dyoder/autocode/tree/master

从GitHub的文档

require 'autocode' 

    module Application 
    include AutoCode 
    auto_load true, :directories => [ :configurations, :models, :views, :controllers ] 
    end 

这将尝试从给定的目录动态加载代码,使用模块名称来确定哪个看 目录,因此,应用:: CustomerModel可以加载文件models/customer_model.rb。

此外,你可以检查轨道导轨的方式。

+1

供参考[autocode](http://github.com/dyoder/autocode/tree/master)是“此存储库是否稍后将会移除更长时间的使用。请使用wave/autocode存储库。“ – jtzero 2013-07-17 16:31:04

结账此类加载

http://github.com/alexeypetrushin/class_loader

假设你有以下目录结构

/your_app 
    /lib    
     /animals 
      /dog.rb 
     /zoo.rb 

只是点的ClassLoader您的应用程序的根,它会找到并加载所有其他类自动

require 'class_loader' 
autoload_dir '/your_app/lib' 

Zoo.add Animals::Dog.new # <= all classes loaded automatically