如何从任何地方需要一些lib文件

时间:2013-07-30 15:20:30

标签: ruby-on-rails ruby require

我会解释我的情况。

这是我的rails应用程序中的文件树:

lib / my_module.rb

require 'my_module/my_file'

module My_module

end

LIB / my_module / my_file.rb

class Tweetag::Collector
   (...)
end

我已经制作了一个ruby脚本,我已将其置于config / jobs /

我真的不明白我应该如何在此文件中要求my_file.rb文件。

require '../../my_module/my_file.rb'

它给了我'require':无法加载这样的文件

同样的错误只需要'my_module',这就是我在控制器中所做的......

有人在这里向我解释一下吗?非常感谢

5 个答案:

答案 0 :(得分:19)

您可以自动包含lib folder下的所有内容并避免这些问题:

config/application.rb

中输入您的文件
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

答案 1 :(得分:14)

如果您只想要一个特定的文件,那么

做一些与Rails root相关的事情

for ex: --

lib/plan.rb

module Plan
 ...some code...
end

如果您只想在某些型号中使用它,请说app / models / user.rb

在用户模型中执行

require "#{Rails.root}/lib/plan"

class User < ActiveRecord::Base
  include Plan
end

如果您希望它随处可用

@VecchiaSpugna提供了一个解决方案

你也可以在config / initializers文件夹中创建一个ruby文件

并逐个要求所有文件

OR

try this

require '../../my_module/my_file'

instead of 

require '../../my_module/my_file.rb'

you don't need specify extension with require.

答案 2 :(得分:6)

我认为有两种解决方案。

1)将lib路径添加到搜索路径。 在红宝石中:

$:.unshift('../../my_module/lib')

然后你可以require 'my_module.rb'

我认为Vecchia Spugna answer是我的ruby-answer的rails版本。 (我不熟悉铁轨)。

2)另一种解决方案:

lib/my_module.rb中,您需要my_file。此文件是相对于my_module.rb的?然后使用require_relative

require_relative './my_module/my_file'

答案 3 :(得分:0)

类似于require_relative,

# inside lib/my_module.rb 
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))

这将扩展当前文件目录的路径并添加所需的相对文件路径。

答案 4 :(得分:0)

只是插话,因为几乎没有解决方案使我花了很长时间才弄清楚这一点。

•我不得不使用普通的旧需求。我将其放在config/application.rb文件中。

patching_file_path = File.expand_path("./lib", Dir.pwd) Dir[patching_file_path+'/*.rb'].each {|file| require file }

•我还尝试将临时puts "I'm Working!放在文件中,以便可以检查控制台是否正在实际加载。

•另外,如果您使用的是Spring Loader,则在启动控制台之前,应在终端中执行bin/spring stop,然后再启动Rails控制台。否则,它将不会加载新文件。