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 sans succés ....
Voici mon code :
runexecution est la fonction que je lance depuis l'input de mon formulaire; elle est décrite dans app/controllers/executions_controller.rb
le programme qui tourne en boucle, appelée par l'instruction ci-dessus Daemons.run('myserver.rb', options) , est myserver.rb qui est à la racine de mon site :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 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
et voici les résultat à 'écran
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #!/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
Si j'exécute le programme myserver.rb depuis la console avec la commande ruby myserver.rb 1 2 3 : tout se passe bien; voici le stdout
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 => 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 # 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
Partager