Zoz*_*Zoz 21 ruby ruby-on-rails require
我会解释一下我的情况.
这是我的rails应用程序中的文件树:
LIB/my_module.rb
require 'my_module/my_file'
module My_module
end
Run Code Online (Sandbox Code Playgroud)
LIB/my_module/my_file.rb
class Tweetag::Collector
(...)
end
Run Code Online (Sandbox Code Playgroud)
我已经制作了一个ruby脚本,我已将其置于config/jobs /
我真的不明白我应该如何在这个文件中要求文件my_file.rb.
require '../../my_module/my_file.rb'
Run Code Online (Sandbox Code Playgroud)
它给了我'require':无法加载这样的文件
同样的错误只需要'my_module'这就是我在控制器中所做的事情......
有人在这里向我解释一下?非常感谢
小智 21
您可以自动包含lib下的所有内容folder并避免这些问题:
在中输入您的文件 config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
Run Code Online (Sandbox Code Playgroud)
Sac*_*ngh 15
如果你只想要一个特定的文件,
像这样做一些相对于Rails root的东西
for example: --
lib/plan.rb
module Plan
...some code...
end
Run Code Online (Sandbox Code Playgroud)
如果您只想在某些型号中使用它,请说app/models/user.rb
在用户模型中做
require "#{Rails.root}/lib/plan"
class User < ActiveRecord::Base
include Plan
end
Run Code Online (Sandbox Code Playgroud)
如果你想让它随处可用
一个解决方案由@VecchiaSpugna提供
您还可以在config/initializers文件夹中创建ruby文件
并要求所有文件一个接一个
要么
try this
require '../../my_module/my_file'
instead of
require '../../my_module/my_file.rb'
Run Code Online (Sandbox Code Playgroud)
我认为有两种解决方案.
1)将lib路径添加到搜索路径.在红宝石中:
$:.unshift('../../my_module/lib')
Run Code Online (Sandbox Code Playgroud)
然后你可以 require 'my_module.rb'
我认为Vecchia Spugna的答案是我的红宝石答案的轨道版本.(我不熟悉rails).
2)另一个解决方案:
在lib/my_module.rb你的需要my_file.这个文件是相对于你的my_module.rb?然后使用require_relative:
require_relative './my_module/my_file'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36983 次 |
| 最近记录: |