Skip to content
Makes it so you can set a remote destination for thor's actions (via ssh/sftp)
Find file
New pull request
Failed to load latest commit information.
lib Add stderr logging disable option
spec run and exec now take an options hash
.gitignore Adding more remote functionality, adding tests, vagrant integration f…
LICENSE Fix readme typo: Closes #1
Rakefile Adding more remote functionality, adding tests, vagrant integration f…
thor-ssh.gemspec More thor versions for rails


ThorSsh takes thor and allows it to run from local to remote. It assumes that the sources are always local and the remotes are always remote.

ThorSsh Assumptions

For running as_user('other_user') the assumption is that your connection is logged in either as 1) root, or 2) a user who can sudo to root


    gem 'thor-ssh'

Use thor as you normally would, but on any thor instance add the following:

    class ThorTest < Thor
        include Thor::Actions
        include ThorSsh::Actions

Then set a destination server to an Net::SSH connection to make all actions use a different server for the destination.

    self.destination_connection = Net::SSH.start(... [ssh connection] ...)

Things that don't work yet

This is still a work in progress. The main issue is that calling #inside or anything that depends on it (in_root) does not work yet. I'll get it working soon though.

TODO: Get #inside working TODO: Add other features needed for provisioning system TODO: Make way to copy remote to remote TODO: Update method blacklist

Running Tests

The test run through vagrant, which seemed logical since we want to test ssh stuff.

Install a box (first time only)

    cd spec/vagrant
    bundle exec vagrant box add ubuntu11
    bundle exec vagrant init ubuntu11

    # enable the sandbox and create a commit we can rollback to
    bundle exec vagrant sandbox on
    bundle exec vagrant sandbox commit

Start box

    vagrant up

Run the tests

    cd ../..
    bundle exec rspec

When you're done

    cd spec/vagrant
    vagrant halt


Add upload progress:

Something went wrong with that request. Please try again.