2

いつでもgemを使用してユーザーに誕生日のリマインダーを送信するcronジョブを作成しようとしていますが、このcronを毎日実行したいと考えています。

いつでもgemが機能していますが、cronジョブでエラーが発生し続けます。Railsコンソールでコントローラーメソッドを呼び出して把握しようとしていますが、エラーが発生し続け、理由がわかりません。

私はこのコントローラーを持っています:

class BirthdayRemindersController < ApplicationController

    include ApplicationHelper

    # cron job that sends birthday reminders
    def send_birthday_email_reminders 
        users = User.all

        email_addresses = []

        users.each_with_index do |user, i|
            if user.user_details.birthday_reminders == true
                email_addresses[i] = get_primary_email(user)
            end
        end

        p email_addresses

        users.each do |user|
            if user.user_details.birthday == Date.today
                p "reminder sent"
                send_birthday_reminders(user, email_addresses)      
            end
        end
    end
end

そして、レールコンソールで私はこれらの両方を試しましたが、両方ともエラーになります。

Toms-Mac-mini:famnfo TomCaflisch$ rails c
Loading development environment (Rails 3.2.9)
irb(main):001:0> BirthdayRemindersController.send_birthday_email_reminders
NoMethodError: undefined method `send_birthday_email_reminders' for BirthdayRemindersController:Class
        from (irb):1
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
irb(main):002:0> BirthdayReminders.send_birthday_email_reminders
NameError: uninitialized constant BirthdayReminders
        from (irb):2
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
        from /Users/TomCaflisch/.rvm/gems/ruby-1.9.3-p327@famnfo/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
irb(main):003:0> 

私は何が欠けていますか?このコントローラーにルートを定義していません。これは、Webブローを介して誰もコントローラーをヒットできないようにするためです。

4

2 に答える 2

5

コントローラーのメソッドは、クラス メソッドではなくインスタンス メソッドです。クラス メソッドは で定義されself.ます。コンテキスト全体を見逃すため、コンソールからコントローラー アクションをトリガーするのは困難です。セッションもリクエストもレスポンスもありません。これらすべてが、コントローラー アクション内のコードの操作を困難にしています。外部からコードをトリガーする必要がある場合 (コンソール、ラックタスク、その他のコード)。コードを独自のクラスに抽出する必要があります。

于 2013-01-05T14:03:26.057 に答える
0
  1. 「デバッガー」ジェムを使用します。
  2. コントローラーメソッドにデバッガーを追加し、-> "rails s --debugger" を使用してアプリケーションをデバッガーモードで実行したら、コンソールでそれを試します
于 2015-02-06T08:24:02.037 に答える