2014-10-21 2 views
0

У меня возникли проблемы с пониманием документации планировщика Heroku.Heroku Scheduler - задание ежедневной задачи

Они дают это как пример кода, но я не уверен, что к чему:

desc "This task is called by the Heroku scheduler add-on" 
task :update_feed => :environment do 
    puts "Updating feed..." 
    NewsFeed.update 
    puts "done." 
end 

task :send_reminders => :environment do 
    User.send_reminders 
end 

Я надеюсь использовать этот планировщик, чтобы вызвать метод из моего NotificationsController на ежедневной основе. Я попытался модифицировать свой код:

desc "This task is called by the Heroku scheduler add-on" 
task notify: :environment do 
    Notifications.notify 
end 

Мой notifications_controller.rb выглядит следующим образом: Примечание Интеграция API Twilio является включено ... и это будет переработан вниз по дороге, но он работает в тестировании.

class NotificationsController < ApplicationController 
    require 'twilio-ruby' 

    skip_before_action :verify_authenticity_token 
    before_action :set_twilio_client 

    $numbers = [] 
    User.all.select {|user| $numbers << user.phone_number} 


    def daily_text 
     $daily_text = ["Test 1", "Test 2", "Test 3"] 
     $daily_text.sample 
    end 

    def notify 
     message = @client.messages.create(
      from: '+1401XXXXXXX', 
      to: $numbers, 
      body: daily_text 
      ) 

     render plain: message.status 
    end 

    private 

    def set_twilio_client 
     twilio_account_sid = ENV["TWILIO_ACCOUNT_SID"] 
     twilio_auth_token = ENV["TWILIO_AUTH_TOKEN"] 
     @client = Twilio::REST::Client.new twilio_account_sid, twilio_auth_token 
    end 

end 

Возможно, мне нужно переместить некоторые элементы до уровня модели? Любые рекомендации приветствуются.

ответ

0

я переработан и переехал большинство вещей в TwilioClient модели:

class TwilioClient 
    require 'twilio-ruby' 

    def initialize 
     @client = Twilio::REST::Client.new ENV["TWILIO_ACCOUNT_SID"], ENV["TWILIO_AUTH_TOKEN"] 
    end 

    def notify 
     @client.messages.create(
      from: '+1401XXXXXXX', 
      to: all_phone_numbers, 
      body: daily_text 
     ) 
    end 

    private 

    def daily_text 
     ["Test 1", "Test 2", "Test 3"].sample 
    end 

    def all_phone_numbers 
     User.pluck(:phone_number) 
    end 

end 

Уведомления контроллер теперь выглядит следующим образом:

class NotificationsController < ApplicationController 
    skip_before_action :verify_authenticity_token 

    def notify 
     client = TwilioClient.new 
     result = client.notify 
     render plain: result.status 
    end 
end 

и задачи грабли:

desc "This task is called by the Heroku scheduler add-on" 
task notify: :environment do 
    client = TwilioClient.new 
    client.notify 
end 
Смежные вопросы