1

我有一个 rake 任务,旨在调用 Mailer 并向满足给定条件的某些用户发送电子邮件。但是,当我使用从控制台调用 rake 任务时,rake nagging_email:send 我得到以下“ArgumentError:没有给出方法名称”并且任务没有运行。完整的控制台错误日志可以在这里看到:https ://gist.github.com/srt32/6433024

我有一个邮件设置如下:

class WorkoutMailer < ActionMailer::Base
    def nagging_email(user)
      @user = user
      subject = "What have you done today?"
      @url = 'http://frozen-taiga-7141.herokuapp.com/members/sign_in'

      mail to: @user.email,
        subject: subject.to_s
    end
end

然后是一个如下的 rake 任务,它获取所有满足给定条件(懒惰)的用户,然后以该用户为参数调用 Mailer:

namespace :nagging_email do
  desc "send nagging email to lazy users"
  task :send => :environment do
    daily_nag
  end

  def daily_nag
    users = User.all
    users.each do |user|
      unless last_workout(user) == Date.today
        WorkoutMailer.nagging_email(user).deliver
      end
    end
  end

  def last_workout(user)
    user = user
    last_workout = user.workouts.order("date DESC").limit(1)
    last_workout_date = last_workout.date
    return last_workout_date
  end
end

任何试图弄清楚如何运行这个 rake 任务的帮助将不胜感激。谢谢。

4

1 回答 1

4

您应该从终端运行 rake,而不是 rails 控制台。如果您出于某种原因想从 Rails 控制台执行此操作,则应该加载这样的任务

require 'rake'
MyRailsApp::Application.load_tasks 
Rake::Task['my_task'].invoke
于 2013-09-04T08:26:21.817 回答