我会解释一下我的情况。
这是我的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'这就是我在控制器中所做的事情......
有人在这里向我解释一下?非常感谢
您可以自动包含lib folder
and下的所有内容,以避免这些问题:
在config/application.rb
中输入您的文件
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
如果你只想要一个特定的文件,那么就像这样做一些与Rails root相关的东西
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中的文件指定扩展名。
我认为有两种解决方案。
1)将lib路径添加到搜索路径。在红宝石中:
$:.unshift('../../my_module/lib')
然后你可以require 'my_module.rb'
我认为Vecchia Spugna answer是我的ruby-answer的rails版本。 (我不熟悉rails)。
2)另一个解决方案:
在你的lib/my_module.rb
你需要my_file
。这个文件是相对于你的my_module.rb
?然后使用require_relative
:
require_relative './my_module/my_file'
与require_relative类似,
# inside lib/my_module.rb
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))
这将扩展当前文件目录的路径并添加所需的相对文件路径。
只是因为我花了很长时间才想到这一点,因为很少有解决方案有效。
•我不得不使用普通的旧要求。我把它放在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!
,这样我就可以检查控制台,看看它是否真的在加载。
•另外,如果您使用弹簧加载器,在启动控制台之前,您应该在启动rails控制台之前在终端中执行bin/spring stop
。否则,它将不会加载新文件。