如何在 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.rbconfig.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 语句)?

[在Android Studio中,构建一个Android Wear项目,如何在两个模块中包含相同的文件

如何在 Dojo AMD 中包含遗留模块

如何在 Joomla k2 item.php 中包含新模块

如何在模块中包含 *.py 以外的文件?

使用模块和计数时如何在 terraform 中包含标签