我会解释我的情况。
这是我的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',这就是我在控制器中所做的......
有人在这里向我解释一下吗?非常感谢
答案 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控制台。否则,它将不会加载新文件。