2010-07-22 18 views
0

J'ai une banque de données avec un cache et un db, simple. La partie la plus délicate est que je veux un moyen de contrôler si le datastore atteint la base de données en temps réel. C'est-à-dire pendant que le processus est en cours je veux pouvoir basculer si elle est connectée à la DB ou pas. J'ai regardé dans les variables d'env, mais il ne semble pas que celles-ci soient mises à jour au fur et à mesure que le processus s'exécute. Existe-t-il un moyen simple d'obtenir un peu de la ligne de commande dans le processus en cours d'exécution, ou dois-je juste compter sur les ops capables de laisser tomber les écouteurs db en cas de catastrophe? Notez que tout cela se fait dans la vanille rubis - pas de rubis sur les rails.Comment obtenir des données dans un processus Ruby?

Merci! -Jess

Répondre

0

Je pense que vous pouvez utiliser des canaux nommés pour une communication simple:

#pipes.rb: 
f = File.open 'mypipe', 'r+' 
loop do 
    begin 
    s = f.read_nonblock 1 
    rescue Exception 
    end 
    case s 
    when '0' 
    puts 'Turn off DB access!' 
    when '1' 
    puts 'Turn on DB access!' 
    end 
    sleep 1 
end 

Et vous pouvez contrôler votre accès db externe en écrivant au tube nommé:

jablan-mbp:dev $ echo 101 > mypipe 

qui se traduit par:

jablan-mbp:dev $ ruby pipes.rb 
Turn on DB access! 
Turn off DB access! 
Turn on DB access! 
+0

Merci. C'est ce que nous avons fini par faire. J'ai juste eu un vain espoir qu'il y avait quelque chose de plus simple, mais vraiment ce n'est pas mauvais. – Jess

0

Une stratégie de mémoire partagée peut être utile d'envisager. En supposant que vous utilisez un système POSIX, consultez mmap pour les fichiers mappés en mémoire et SysVIPC pour les files d'attente de messages, les sémaphores et la mémoire partagée.

+0

Oui, je pourrais le faire - mettre en place un script de ligne de commande qui transmettrait le message au processus ruby. C'est un bon point. J'espérais une solution plus simple, mais tout est bien entendu sous-jacent de toute façon. Un peu pita à mettre en œuvre cependant. – Jess