Мне нужно создать грабли для выполнения некоторых активных операций записи через туннель ssh.
Задача rake запускается на удаленной машине с Windows, поэтому я хотел бы сохранить все в рубине. Это моя последняя попытка.
desc "Syncronizes the tablets DB with the Server"
task(:sync => :environment) do
require 'rubygems'
require 'net/ssh'
begin
Thread.abort_on_exception = true
tunnel_thread = Thread.new do
Thread.current[:ready] = false
hostname = 'host'
username = 'tunneluser'
Net::SSH.start(hostname, username) do|ssh|
ssh.forward.local(3333, "mysqlhost.com", 3306)
Thread.current[:ready] = true
puts "ready thread"
ssh.loop(0) { true }
end
end
until tunnel_thread[:ready] == true do
end
puts "tunnel ready"
Importer.sync
rescue StandardError => e
puts "The Database Sync Failed."
end
end
Задача, кажется, зависает в состоянии готовности туннеля и никогда не пытается выполнить синхронизацию.
Я успешно выполнил сначала задачу rake для создания туннеля, а затем запустил синхронизацию rake в другом терминале. Однако я хочу объединить их, чтобы в случае ошибки с туннелем он не пытался выполнить синхронизацию.
Я впервые использую рубиновые потоки и переадресацию Net :: SSH, поэтому я не уверен, в чем здесь проблема.
Любые идеи!?
Спасибо