Rails 5、为什么我在rake任务中调用class时得到未定义的常量?

Rails 5, Why am I getting undefined constant when calling a class in a rake task?

我在 Rails 5.1.4 上使用 Ruby 来制作一个小报告系统。

我使用的处理程序 class 如下所示:

# app/handlers/report_handler.rb
class ReportHandler 
  ROLES = %w[admin staff]

  def self.queue_reports
    tennants = Tennant.elite

    tennants.each do |tennant|
      users = tennant.users.where(role: ROLES)
      users.each { |user| ReportMailer.monthly_report(user).deliver_later }
    end
  end
end

当使用 RSpec 测试时 class 我所有的测试 运行 都是绿色的。但是当我 运行 我的 rake 任务时它显示这个错误:

*** NameError Exception: uninitialized constant ReportHandler::Tennant

这是我的 rake 任务的样子:

# lib/tasks/reports.rake
require './app/handlers/report_handler'

namespace :reports do
  # rake reports:send_monthly_reports
  desc "Send monthly reports to elite tennants"
  task :send_monthly_reports do
    ReportHandler.queue_reports
  end
end

我不知道为什么当我从我的规范和控制台调用它时我的报告有效,而不是从我的抽取任务中调用它。

当 运行 我的 rake 任务:

时,我没有加载我的应用程序环境

修复方法如下:

namespace :reports do
  desc "Send monthly reports to elite organizations"
  task send_monthly_reports: :environment do 
    ReportHandler.queue_reports
  end
end