There are a few reasons the upload! method of capistrano might fail on you, but you usually see some kind of an error, such as a read-only file system error on the logged-in user. I just had a very mysterious failure with no error text whatsoever, even in verbose mode.
Turns out the issue was STDOUT output from my remote .bashrc file. I was setting some things in my remote host’s bashrc, and had it echoing debug messages (ie “started ssh agent”, and, most cleverly, “hi from bashrc!”). Almost every other capistrano command had no problem with this, but upload! would just sit there and hang, not receiving the server response it expects.
I removed the echo statements, and everything went back to normal. So… maybe don’t do that. Hopefully this helps somebody, someday.