Ruby on rails 如何从任何地方需要一些lib文件
我会解释我的情况 以下是我的rails应用程序中的文件树: lib/my_module.rbRuby on rails 如何从任何地方需要一些lib文件,ruby-on-rails,ruby,require,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
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”:无法加载这样的文件
同样的错误只需要“我的_模块”,这是我在控制器中所做的
有人来向我解释吗?非常感谢您可以将所有内容自动包含在lib
文件夹下
并避免以下问题:
在config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
如果您只需要一个特定的文件, 执行与Rails根相关的操作,如下所示
for example: --
lib/plan.rb
module Plan
...some code...
end
如果您只想在某些型号中使用它,请使用app/models/user.rb
用户模型中的do
require "#{Rails.root}/lib/plan"
class User < ActiveRecord::Base
include Plan
end
您不需要在require中为文件指定扩展名。我认为有两种解决方案 1) 将库路径添加到搜索路径。 在ruby中: 然后您可以
要求“my_module.rb”
我认为这是我的ruby答案的rails版本。(我不熟悉rails)
2) 另一个解决方案:
在lib/my_module.rb中
需要my_文件
。此文件相对于您的my_module.rb
?然后使用require\u 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']。每个{文件|需要文件}
•我还将一个临时放在我试图要求的文件中,这样我就可以检查控制台,看看它是否正在实际加载
•此外,如果您使用的是spring loader,那么在启动控制台之前,您应该在启动rails控制台之前在终端中执行bin/spring stop
。否则,它不会加载新文件。我这样做了,但仍然:`:未初始化常量MyModule(NameError)现在在您需要的地方包含您的模块,使用include My_module
您声明的My_module
,但您使用的是MyModule
。解决此不一致性。但是惯例是对您定义的模块使用MyModule
表单。实际上,您可以用“Tweetag”和所有“My_文件”替换所有“My_module”“收藏家”。我试图泛泛地解释,但失败了。无论如何,当我“包含Tweetag”时,它不起作用。在Rails 5.2.2的生产服务器上,您可能需要使用config.eager\u load\u path+=%W(#{config.root}/lib)
事实上,我知道我不能像您刚才所说的那样做Rails特有的事情。我只是想运行命令行“ruby my_ruby_script.rb”并在其中需要我的lib模块。如果执行require Rails.root.join('lib','plan'),
?1)不是更为惯用的方法,因为config/jobs中的作业似乎不是从Rails应用程序中启动的。因此,他必须按照您描述的那样自己设置加载路径,而不是期望一个未使用的rails环境能够为他完成这项工作。阻止春天对我起了作用。干杯
require_relative './my_module/my_file'
# inside lib/my_module.rb
require File.expand_path('./my_module/my_file', File.dirname(__FILE__))