Fabric (and Capistrano, presumably the unnamed Ruby tool you came across) are a bit unusual in that they're task runners with extra features for easily running tasks on remote hosts. I'm not aware of any other popular tools that do exactly the same thing, but depending on your needs there are a few other options that may work for you.
grunt-ssh plugin to integrate ssh with grunt, while this one relies on
Using task runners to deploy code tends to be an approach favored by developers who are wearing an ops hat. When you ask an operations engineer, they're more likely to suggest hacking this behavior into a configuration tool. This can take many forms (for instance, packaging your app into an rpm or deb, then installing it like any other software), but I'm going to focus on what I think would be the simplest and most direct method for you.
Ansible is ostensibly a configuration management tool, but it really shines at task orchestration, which I would define as "running a set of actions across a set of servers". The official documentation is a good place to get started, but to give you an idea of what this might look like, you might have a playbook (a YAML file that defines a set of tasks) like this:
- hosts: webservers
- name: update code checkout
- name: restart webserver
When you run this file with
ansible-playbook, it will look up your host list (as simple as an ini file, but can also be a dynamic list written in any programming language) to determine what servers exist and what groups they're in, and then run the defined tasks on the servers that you tell it to.