从控制台运行rake任务会产生'ArgumentError:没有给出方法名'错误

时间:2013-09-04 05:22:17

标签: ruby-on-rails console rake actionmailer rails-console

我有一个rake任务,用于调用Mailer并通过电子邮件发送满足给定条件的某些用户。但是,当我使用rake nagging_email:send 从控制台调用rake任务时,我得到以下'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任务的帮助。感谢。

1 个答案:

答案 0 :(得分:4)

你应该从终端运行rake,而不是rails console。 如果由于某种原因想要从rails控制台执行此操作,则应加载类似

的任务
require 'rake'
MyRailsApp::Application.load_tasks 
Rake::Task['my_task'].invoke