我在lib / models / alert_import中有一个文件alert_import',我想在我的任务中使用......这样:
task :send_automate_alerts => :environment do
# STDERR.puts "Path is #{$:}"
Rake.application.rake_require '../../lib/models/alert_import'
ai = AlertImport::Alert.new(2)
ai.send_email_with_notifcations
end
在此代码中,我收到错误:
找不到../../ lib / models / alert_import
在AlertImport中我有:
module AlertImport
class Alert
def initialize(number_days)
@number_days = number_days
end
def get_all_alerts
alerts = { }
Organization.automate_import.each do |o|
last_import = o.import_histories.where(import_type: "automate").last
last_successful_import = ImportHistory.last_automate_successful_import(o)
if last_import
if last_import.created_at + @number_days.days >= Time.now
alerts[o.id] ="Error during last automate import Last successful import was #{ last_successful_import ? last_successful_import.created_at : "never"}" if last_import.status == "failure"
alerts[o.id] ="Error during last automate import - status pending Last successful import was #{ last_successful_import ? last_successful_import.created_at : "never"}" if last_import.status == "pending"
else
alerts[o.id] = "There were no new files uploaded within #{@number_days} days"
end
else
alerts[o.id] = "The import was never triggered at all"
end
end
alerts
end
def send_email_with_notifcations
alerts =get_all_alerts
unless alerts.empty?
AlertMailer.email_notifications(alerts).deliver
end
end
end
end
正确的解决方案是:
desc "Send alerts about automate imports"
task :send_automate_alerts => :environment do
require "#{Rails.root}/lib/models/alert_import"
ai = AlertImport::Alert.new(2)
ai.send_email_with_notifcations
end
答案 0 :(得分:8)
在Rails 3.x中,我首先使用require
导入文件,然后将模块包含在命名空间中,从而取得了成功。以下是它的外观:
require 'models/alert_import'
namespace :alerts
include AlertImport
desc 'Send alerts about automate imports'
task send_automate_alerts: :environment do
ai = AlertImport::Alert.new(2)
ai.send_email_with_notifcations
end
end
答案 1 :(得分:3)
很可能你的路径错了,你可以按照以下方式进行操作
task :send_automate_alerts => :environment do
# STDERR.puts "Path is #{$:}"
Rake.application.rake_require "#{Rails.root}/lib/models/alert_import"
ai = AlertImport::Alert.new(2)
ai.send_email_with_notifcations
end
"#{Rails.root}"
这将为您提供项目的当前路径
答案 2 :(得分:3)
我尝试了一些选项,最值得注意的是尝试rake require
,但看起来rake_require
的文档不正确。它特别不包括不以.rake
所以最后,我是“从零开始”做到的 - 这样的事情: ```
namespace :my_namespace do
task :my_task do
require File.join(Rails.root, 'app', 'services', 'my_module.rb')
class Wrapper
include MyModule
end
Wrapper.new.the_method_I_need(args)
end
end
完成。
答案 3 :(得分:1)
你的路径错了,你可以尝试:
task :send_automate_alerts => :environment do
# STDERR.puts "Path is #{$:}"
Rake.application.rake_require "#{Rails.root}/lib/models/alert_import"
ai = AlertImport::Alert.new(2)
ai.send_email_with_notifcations
end
问候!
答案 4 :(得分:0)