Execução de comandos do sistema com registro

require 'open3'

module Runnable

class RunnableError < Exception; end

extend
ActiveSupport::Concern

def logger
Rails.logger
end

def run(command, options = {})
message
= "executing `#{command}`n"

stdout
, stderr, status = Open3.capture3(command)

if status.success?
message
<< stdout
logger
.info message
else
message
<< stderr
logger
.error message
raise RunnableError.new(stderr)
end
end

end