Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将Net::SSH放入模型方法中?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何将Net::SSH放入模型方法中?

Ruby on rails 如何将Net::SSH放入模型方法中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个rails模型实例,它代表一个EC2实例 目前,每次我有一个必须对其进行SSH的方法时,我都必须在我想做的任何地方设置Net::SSH,这是非常多的 例如: Net::SSH.start(ip, 'ubuntu', keys: "mykey.pem" ) do |ssh| ssh.exec "sudo chmod +x /tmp/provision.sh" end 有没有一种方法可以将“ssh”设置位考虑到实例模型中?如何将其封装到私有方法中,并产生到调用位置的连接 class I

我有一个rails模型
实例
,它代表一个EC2实例

目前,每次我有一个必须对其进行SSH的方法时,我都必须在我想做的任何地方设置Net::SSH,这是非常多的

例如:

Net::SSH.start(ip, 'ubuntu', keys: "mykey.pem" ) do |ssh|
  ssh.exec "sudo chmod +x /tmp/provision.sh"
end

有没有一种方法可以将“ssh”设置位考虑到实例模型中?

如何将其封装到私有方法中,并产生到调用位置的连接

class Instance

  def chmod
    start do |ssh|
      ssh.exec "sudo chmod +x /tmp/provision.sh"
      # other operations on ssh
    end
  end

  private

    def start
      Net::SSH.start(ip, 'ubuntu', keys: "mykey.pem" ) do |ssh|
        yield ssh
      end
    end
end

这看起来很酷,实际上,我可以在传递的块中放入多行代码(即多个ssh.exec命令)吗?非常感谢,这太棒了!一个问题。“开始”代表什么?为什么有必要/重要?