gpt4 book ai didi

ruby-on-rails - Rails Rake和mysql ssh端口转发

转载 作者:行者123 更新时间:2023-12-02 14:26:10 26 4
gpt4 key购买 nike

我需要创建一个rake任务,以通过ssh隧道进行一些 Activity 的记录操作。

rake任务在远程Windows机器上运行,因此我想将其保存在 ruby 中。这是我的最新尝试。

  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 sync时,我获得了成功。但是,我想将这些结合起来,以便如果隧道出现错误,它将不会尝试同步。

这是我第一次使用ruby Threads和Net::SSH转发,所以我不确定这里的问题是什么。

有任何想法吗!?

谢谢

最佳答案

问题很可能与这里相同:

Cannot connect to remote db using ssh tunnel and activerecord

不要使用线程,您需要在另一个进程中 fork 导入器,以使其正常工作,否则您将被ssh事件循环锁定。

关于ruby-on-rails - Rails Rake和mysql ssh端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com