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
我在 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