Bonjour, Rails et daemon ne doivent pas faire bon ménage.
Pour faire tourner des tâches de manière asynchrone dans une application Ruby on Rails, je te conseille d'utiliser ActiveJob ( http://guides.rubyonrails.org/active_job_basics.html) et Sidekiq. Bon courage! -- φ <http://pcreux.com> 2016-08-31 16:06 GMT+02:00 ziburudebian <[email protected]>: > Bonjour à tous > > J'utilise la gem *daemon *mais mon programme ne lit pas toutes les > données de ma table client : il y a 5 enregistrements, il s'arrête au > deuxième !!! ça fait trois jours que je cherche, j'en peux plus .... > Voici mon code : > > *runexecution *est la fonction que je lance depuis le bouton de mon > formulaire; elle est décrite dans > *app/controllers/executions_controller.rb* > > class ExecutionsController < ApplicationController > > def runexecution > # ============================================================ > ================================================ > # DESCRIPTION : Permet de demarrer ou arreter l'execution d'un script > (action=start ou stop) > # ============================================================ > ================================================ > require 'daemons' > # ---------------------------- > # traitement des parametres > # ---------------------------- > return "" if params.nil? # ce test permet de ne pas rentrer dans la > fonction lors de l'appel via le menu > action = "" > params.each do |key,value| > action = "start" if (key.index("loopstart") != nil) > action = "stop" if (key.index("loopstop") != nil) > end > logger.info("******************action="+action) > case action > when "start" > exedate = "2015-10-03 08:30" > frequence = "0.05" > listclientselectionne = "1-2-3-4-5" > paramopt = "" > options = {:ARGV => [action, paramopt, '--', exedate, > frequence, listclientselectionne], > :dir_mode => :script, > :dir => 'tmp/pids', > :multiple => true, > :ontop => true, > :mode => :load, > :backtrace => true, > :monitor => true, > :log_output => true > } > logger.info("******************options="+options.to_s) > Daemons.run('myserver.rb', options) > logger.info("******************FIN") > > when "stop" > logger.info("******************loopstop") > else > redirect_to executions_execution_path > end # case action > > end # runexecution > > end #class > > le programme qui tourne en boucle est* myserver.rb* qui est à la racine > de mon site : > > #!/usr/bin/env ruby > ENV['RAILS_ENV'] ||= 'production' > require File.expand_path('../config/environment', __FILE__) > print "\nParametres= " + ARGV[0].to_s + "****" + ARGV[1] + "****" + > ARGV[2] + "\n" > exedate = ARGV[0] > frequence = ARGV[1] > listclientselectionne = ARGV[2] > delai = frequence.to_f * 60 > listclientselectionne = listclientselectionne.split("-") > print "Nbclient=" + listclientselectionne.count.to_s + "\n" > loop do > print Time.now.to_s + "\n" > listclientselectionne.each do |idcl| > print idcl + "\n" > begin > print "avant\n" > objclient = Client.find(idcl) > print "apres\n" > if (!objclient.nil?) > print objclient.lastname.to_s + "\n" > # print objclient.name + "\n" > else > print "Erreur sur " + idcl + "\n" > end > rescue ActiveRecord::RecordNotFound => e > objclient = nil > print "Erreur \n" > end > end > sleep(delai) > end > > et voici les résultat à 'écran > > => Booting Thin > => Rails 4.1.7 application starting in production on http://0.0.0.0:3000 > => Run `rails server -h` for more startup options > => Notice: server is listening on all interfaces (0.0.0.0). Consider using > 127.0.0.1 (--binding option) > => Ctrl-C to shutdown server > Thin web server (v1.6.4 codename Gob Bluth) > Maximum connections set to 1024 > Listening on 0.0.0.0:3000, CTRL+C to stop > myserver.rb: process with pid 28318 started. > > Parametres= 2015-10-03 08:30****0.05****5-1-6-2 > Nbclient=5 > 2016-08-31 15:47:56 +0200 > 1 > avant > apres > DURANTON > 2 > avant > apres > VALENT > 3 > avant > log writing failed. closed stream > log writing failed. closed stream > log writing failed. closed stream > > > Si j'exécute le programme *myserver.rb* depuis la console avec *ruby > myserver.rb 1 2 3 : *tout se passe bien; voici le stdout > > # ruby myserver.rb 1 2 3 > Parametres= 1****2****3 > Nbclient=5 > 2016-08-31 16:04:10 +0200 > 1 > avant > apres > DURANTON888 > 2 > avant > apres > VALENT > 3 > avant > apres > VIGILE1AA > 4 > avant > apres > VIGILE2 > 5 > avant > apres > DURANDTON > > > > Si vous avez une idée > > Merci beaucoup > > *Ma config* > > - Debian GNU/Linux 7 > - Rails 4.17 > - Ruby 1.91 > > -- > -- > Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de > Google Groups. > Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse > [email protected] > Pour résilier votre abonnement envoyez un e-mail à l'adresse > [email protected] > --- > Vous recevez ce message, car vous êtes abonné au groupe Google Groupes > "Railsfrance". > Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le > concernant, envoyez un e-mail à l'adresse railsfrance+unsubscribe@ > googlegroups.com. > Pour obtenir davantage d'options, consultez la page > https://groups.google.com/d/optout. > -- -- Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] --- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Railsfrance. Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse [email protected]. Pour plus d'options, visitez le site https://groups.google.com/d/optout .
