Не могли бы вы написать небольшого демона, который находится в read
в канале (или с именем fifo, или в сокете домена unix, или, что более сложно, в порт tcp), который принимает «команды», которые будут выполняться на вашембаза данных?
#!/usr/bin/ruby
require '../config/environment'
while (true) do
File.open("/tmp/fifo", "r") do |f|
f.each_line do |line|
case line
when "cleanup" then puts "clean!"
when "publish" then puts "published!"
else puts "invalid command, ignoring"
end
end
end
end
Вы можете запустить это с помощью спецификатора @reboot
vixie cron, или запустить его с помощью команд capistrano, или запустить его из сценариев init или init.Затем вы пишете свои правила capistrano (которые у вас есть сейчас), чтобы просто выводить команды в fifo:
Сначала,
mkfifo /tmp/fifo
В одном терминале:
$ ./env.rb
В другом терминале:
$ echo -n "cleanup" > /tmp/fifo
$ echo -n "publish" > /tmp/fifo
$ echo -n "go away" > /tmp/fifo
Вывод в первом терминале выглядит следующим образом:
clean!
published!
invalid command, ignoring
Вы можете сделать сопоставление дружественным (возможно, разрешить обычный echo
, а не требоватьecho -n
как мой пример) или недружелюбно, как вы хотите.И команды, которые запускаются, могут, конечно, вызывать файлы вашей модели для выполнения своей работы.
Пожалуйста, убедитесь, что вы выбрали хорошее место для fifo - / tmp /, вероятно, плохое место, так как многие дистрибутивыочистить его при перезагрузке.Также убедитесь, что вы правильно установили владельца и разрешения fifo (chown и chmod) для своего приложения - возможно, вы не захотите, чтобы флеш-плагин Firefox записывал в этот файл и управлял вашей базой данных.