J'utilise Starling et Workling pour traiter les tâches d'arrière-plan dans mon application, un site d'enchères de style Swoopo. Dans ce cas, la tâche d'arrière-plan est un système de notification qui surveille les enchères et notifie le gagnant. Le moniteur est appelé lors de la création de l'objet d'enchères. Mon problème est que mon code de surveillance ne peut pas trouver l'enchère qu'il est censé surveiller. Voici le code:L'ouvrier travaillant ne trouve pas d'enregistrement nouvellement ajouté
Le test unitaire qui échoue:
class AuctionTest < ActiveSupport::TestCase
test "are monitored when created" do
auction = Auction.new(
:name => "A TV",
:markdown => "A large TV",
:starting_bid => 0.01,
:bid_increment => 0.01,
:starts_at => Time.now(),
:ends_at => Time.now() + 5.seconds,
:active => true
)
auction.save
Bid.place(@current_user, auction)
sleep(10) #when bids are placed, time is added to the end of the auction so wait
assert auction.won?
assert_equal @current_user.id, auction.winner_id
end
end
Le code des travailleurs:
class AuctionsWorker < Workling::Base
def monitor(options)
active = true
ends_at = options[:original_ends_at]
while active
auction = Auction.find(options[:auction_id]) #this is the record that cannot be found
if auction.won?
active = false
winner = User.find(auction.high_bidder).id
auction.update_attribute(:winner_id, winner)
else
until Time.now() >= ends_at
sleep(1)
end
end
end
end
end
Le code qui appelle le travailleur:
class Auction < ActiveRecord::Base
def after_create
AuctionsWorker.asynch_monitor(:auction_id => self.id, :original_ends_at => self.ends_at) if self.active?
end
end
Chaque fois que je lance le test, je reçois une erreur me disant que l'enchère fournie au travailleur ne peut pas être trouvée.
Quelqu'un a-t-il des idées? J'utilise les rails 2.3.5, sqlite3 et le dernier Starling, Workling, et tous les autres gemmes associés sur un Mac OS X Mac OS X 10.6.2 si cela aide.
Merci pour votre contribution.
je ne vois pas exactement le problème avec ce genre de ventes aux enchères aussi longtemps que vous ne doivent pas induire les gens lors de leur inscription. L'erreur se produit toujours, cependant, et toutes les autres solutions seraient grandement associées si je ne vous ai pas offensé avec mon choix d'application. – mjaz
http://www.codinghorror.com/blog/archives/001196.html – klochner
J'ai déjà lu ce post. Je ne suis pas d'accord avec Atwood que ces sites sont illégaux et l'équivalent logiciel de Satan lui-même. À mon avis, ils ne sont pas plus malfaisants que n'importe quelle plate-forme de jeu sociale, et c'est ce que j'ai l'intention de faire. J'aurais dû réfléchir plus avant de poster une question concernant ce projet particulier ici. – mjaz