use*_*369 6 ruby rake ruby-on-rails
我在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
Run Code Online (Sandbox Code Playgroud)
在这段代码中我得到错误:
找不到../../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
Run Code Online (Sandbox Code Playgroud)
正确的解决方案是:
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
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
你的路径错误,你可以尝试:
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
Run Code Online (Sandbox Code Playgroud)
问候!
| 归档时间: |
|
| 查看次数: |
14509 次 |
| 最近记录: |