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 [email protected].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .