如何在 rake 任务中包含模块类?
Posted
技术标签:
【中文标题】如何在 rake 任务中包含模块类?【英文标题】:How to include module class inside a rake task? 【发布时间】:2020-09-07 20:53:03 【问题描述】:在 rails 4 应用程序中,我正在尝试创建一个 rake 任务。我正在尝试为其添加一个模块功能,但它不起作用。
模块文件为(/app/models/concerns/user/tags.rb
),
module Concerns::User::Tags
extend ActiveSupport::Concern
...
end
Rakefile 是 (/lib/tasks/keywords.rake
),
require "#Rails.root/app/models/concerns/user/tags.rb"
include Concerns::User::Tags
namespace :keywords do
desc 'Add data'
task :add => :environment do
puts "Adding"
end
end
当我运行这个bundle exec rake keywords:add -t
时出现类似的错误,
NameError: uninitialized constant Concerns
/vagrant/app/models/concerns/user/tags.rb:1:in `<top (required)>'
/vagrant/lib/tasks/keywords.rake:1:in `<top (required)>'
我该如何解决这个问题?请帮帮我。
【问题讨论】:
这不是主要问题,但 top rake 文件中的 require 不应该是强制性的,它应该是自动加载的。你能分享你的develpoment.rb文件,更具体地说是config,autoload_paths 在我的development.rb
中,没有autoload_paths
的东西。在application.rb
、config.autoload_paths += %W(#config.root/lib)
和config.eager_load_paths += %W(#config.root/lib)
【参考方案1】:
我认为您可以尝试将include Concerns::User::Tags
移动到任务块内。如果您在多个任务中需要模块功能,那么可以将其包含在每个任务中。你的问题基本上在这里讨论Is it possible to include modules in rake task and make its methods available for the task in rails app?
【讨论】:
@ShruthiR 可能是春季跑步?这很奇怪Spring is not running
显示出来。以上是关于如何在 rake 任务中包含模块类?的主要内容,如果未能解决你的问题,请参考以下文章
如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?