Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails定时短信发送器_Ruby On Rails_Ruby_Sms_Twilio - Fatal编程技术网

Ruby on rails Rails定时短信发送器

Ruby on rails Rails定时短信发送器,ruby-on-rails,ruby,sms,twilio,Ruby On Rails,Ruby,Sms,Twilio,我想每5分钟发送一条短信给我的用户。目前,我的应用程序在创建帐户期间发送短信 # users_controller.rb def create @user = User.new(user_params) if @user.save @user.send_activation_email @user.send_daily_sms flash[:info] = "Veuillez contrôler votre boîte ma

我想每5分钟发送一条短信给我的用户。目前,我的应用程序在创建帐户期间发送短信

# users_controller.rb
def create
      @user = User.new(user_params)
      if @user.save
        @user.send_activation_email
        @user.send_daily_sms
        flash[:info] = "Veuillez contrôler votre boîte mail pour activer votre compte."
        redirect_to root_url
      else
        render 'new'
      end
    end

# user.rb
def send_daily_sms

    # put your own credentials here 
    account_sid = '**********************' 
    auth_token = '**********************' 

    # set up a client to talk to the Twilio REST API 
    @client = Twilio::REST::Client.new account_sid, auth_token 

    @client.account.messages.create({
        :from => '**********', 
        :to => '***********', 
        :body => 'Salut',  
    })
  end
通过执行以下操作,我的项目中已安排了邮件:

# schedule.rb
every :day, :at => '12pm' do    
  rake "email_sender_daily"
end
# My task
task :email_sender_daily => :environment do |_, args|
  User.find_each do |user|
    UserMailer.daily_mail(user).deliver_now if user.daily == true
  end
end
# My UserMailer
def daily_mail(user)
@user = user
mail to: user.email, subject: "Mail journalier"
end

我之所以向您展示这一点,是因为有了UserMailer,我知道如何从其他文件访问它。在这里,我想对SMS执行完全相同的操作,但是如何访问模型中的方法呢?如果没有,我可以把这个方法放在哪里,以便能够从我的rake任务访问它

这里是Twilio开发者福音传道者

在我看来,你有你需要的所有零件。如果
send\u daily\u sms
User
类中的一种方法,那么您所需要的就是这样一个rake任务:

task :sms_sender_daily => :environment do |_, args|
  User.find_each do |user|
    user.send_daily_sms if user.daily == true
  end
end
然后你的schedule.rb看起来像:

every :day, :at => '12pm' do    
  rake "email_sender_daily"
  rake "sms_sender_daily"
end
我要警告的是,通过一种反复调用API的方法向所有用户发送sms消息有点脆弱。如果一条消息由于超时或其他错误而无法发送,则任务将抛出一个错误,无法完成所有消息的发送

我建议员工使用后台队列发送电子邮件和短信,比如Rails的ActiveJob。如果您使用的是最新的Rails 4.2,那么您可以使用一个名为gem的工具,它的工作原理与ActionMailer非常相似,然后您可以定义一个
UserTexter
类,如下所示:

class UserTexter < Textris::Base
  default :from => YOUR_NUMBER

  def daily_sms(user)
    @user = user
    text :to => @user.phone_number
  end
end
task :email_sender_daily => :environment do |_, args|
  User.find_each do |user|
    UserMailer.daily_mail(user).deliver_later if user.daily == true
  end
end

task :sms_sender_daily => :environment do |_, args|
  User.find_each do |user|
    UserTexter.daily_sms(user).deliver_later if user.daily == true
  end
end
有关如何使用gem的更多信息,请查看文档


让我知道这是否有帮助

它起作用了,谢谢!现在我想用用户号替换to号。我正在考虑用我的发送短信方法self.phone=User.phone,然后是To=>phone。这是正确的吗?我还需要在任务中测试user.daily==true和user.phone是否不为null。我试过用户电话?但它不起作用。我让它起作用了,但我现在有另一个问题。我做了phone=self.phone,并将phone传递给to=>。但如果有多个用户使用不同的手机,它只会发送一个。我尝试使用Gem Textris,但它只发送一个号码。奇怪,你是怎么设置电话号码的?它们是否保存在数据库中的用户记录中?是的,它们作为user.phone保存在数据库中。