-1
This is my scheduler.rb in my initializer file 

    unless defined?(Rails::Console) || File.split($0).last == 'rake' 
s = Rufus::Scheduler.singleton 
s.every '1m', :tag => 'main_process' do 
    Rails.logger.info "hello, it's #{Time.now}" 
    Rails.logger.flush 
    Bid.all.each do |bid| 
    id = bid.event_id 
     puts "*" * 50 
     puts bid.id 
     puts bid.event_id 
     puts "*" * 50 
     # @price = BuyNowBid.find_by(bid_id: params[:bid_id]) 
     @events = Unirest.get("https://api.seatgeek.com/2/events/#{id}?&client_id=NjQwNTEzMXwxNDgxNDkxODI1").body 
     if @events["stats"] 
     @low = @events["stats"]["lowest_price"] || 0 
     @avg = @events["stats"]["average_price"] || 0 
     BuyNowBid.create(bid_id: bid.id, lowest_price: @low , average_price: @avg) 

     if @low <= bid.bid 
      send_message("+13125501444", "Lowest price matched! Buy your ticket now!") 
      bid.bid = 0 
      bid.save 
     end 

     else 
     puts 'problem with @events?' 
     p @events 
     end 


    end 
end 

finjoyau rufus comment garder un emploi en cours d'exécution tout en arrêtant l'autre

def send_message (phone_number, alert_message) account_sid = "" auth_token = ""

@client = Twilio::REST::Client.new account_sid, auth_token 
    @twilio_number = "" 
    message = @client.messages.create(
     :from => @twilio_number, 
     :to => phone_number, 
     :body => alert_message 
    ) 
    puts message.to 
    end 

donc je Je cours un travail pour tirer le prix le plus bas chaque minute d'une API et quand le prix le plus bas correspond à une offre, ils reçoivent une notification de texte, qui fonctionne bien, le problème que je suis est que je veux que le travail continue minute je tire les lowes t prix de l'API, mais je ne veux pas que l'utilisateur continue d'obtenir la même notification de texte chaque minute.

À l'heure actuelle, je l'ai pour que cela ne se produise pas, mais après une enchère est en grande partie supprimé de la base de données. Donc, je demande comment puis-je continuer à gratter l'API chaque minute pour la correspondance d'enchère la plus basse, mais n'envoyer qu'un seul texte à l'utilisateur lui notifiant la correspondance et ne pas avoir à supprimer cette enchère de la base de données.

+0

Très floue, le titre de votre question est d'ordre technique, alors que le contenu de votre question (le bas, le grand, le paragraphe) semble être de niveau supérieur. J'ai l'impression que vous pouvez conserver un index en mémoire en mappant les utilisateurs à leur dernière notification reçue et la vérifier à chaque fois pour déterminer si la nouvelle notification vaut la peine d'être envoyée. – jmettraux

Répondre

1

j'étais vraiment au-dessus de penser ce que je viens de créer une nouvelle colonne appelée offre publique enregistrée sur ma table demande de soumission et qui égale à bid.bid avant qu'il ne devienne nulle

 @events = Unirest.get("https://api.seatgeek.com/2/events/#{id}?&client_id=NjQwNTEzMXwxNDgxNDkxODI1").body 

     if @events["stats"] 
     @low = @events["stats"]["lowest_price"] || 0 
     @avg = @events["stats"]["average_price"] || 0 
     BuyNowBid.create(bid_id: bid.id, lowest_price: @low , average_price: @avg) 

     if @low <= bid.bid 
      send_message("+13125501444", "Lowest price matched for #{@events["title"]} ! Buy your ticket now for #{bid.saved_bid}!") 
      **bid.saved_bid = bid.bid** 
      bid.bid = 0 
      bid.save