ruby 如何从任何地方请求一些lib文件

utugiqy6  于 12个月前  发布在  Ruby
关注(0)|答案(5)|浏览(112)

我会解释我的情况。
下面是我的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'

它给了我“要求”:无法加载此类文件
同样的错误只是要求'my_module'这是我在我的控制器.
有人能解释一下吗?非常感谢

3gtaxfhh

3gtaxfhh1#

您可以自动包含lib folder下的所有内容并避免这些问题:
config/application.rb中键入此文件

config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
xzabzqsa

xzabzqsa2#

如果您希望只需要一个特定的文件,那么请执行与Rails根目录相关的操作,如下所示

for example: --

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文件
并要求所有文件在那里一个接一个

try this

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

instead of 

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

你不需要在require中指定文件的扩展名。

bd1hkmkf

bd1hkmkf3#

我认为有两个解决办法。
1)将库路径添加到搜索路径。在ruby中:

$:.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'
8ljdwjyq

8ljdwjyq4#

只是插话,因为我花了很长时间才弄清楚这一点,因为很少有解决方案奏效。
·我不得不使用普通的旧要求。我把它放在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控制台。否则,它不会加载新文件。

eqfvzcg8

eqfvzcg85#

与require_relative类似,

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

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

相关问题