1

メーラーを呼び出し、特定の条件を満たす特定のユーザーにメールを送信するためのレーキ タスクがあります。しかし、コンソールからrakeタスクを呼び出すとrake nagging_email:send 、次の「ArgumentError: no method name given」が表示され、タスクが実行されません。完全なコンソール エラー ログは、 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 タスクは、特定の条件 (遅延) を満たすすべてのユーザーを取得し、そのユーザーをパラメーターとして指定してメーラーを呼び出します。

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

Rails コンソールではなく、端末から rake を実行する必要があります。なんらかの理由で Rails コンソールから実行したい場合は、そのようなタスクをロードする必要があります

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