Multiple heroku accounts

You need to ensure that you are using the correct ssh key.

The way to do this (and the way the heroku accounts plugin prompts you) is to add a section to your ssh config file in ~/.ssh/config. For instance, for my work heroku account I have this in my ssh config:

Host heroku.work
  HostName heroku.com
  IdentityFile ~/.ssh/id_heroku_work_rsa
  IdentitiesOnly yes

Now, and this is crucial, you need to make sure that your git remote is set up to use that same named host. In this case it is heroku.work. Normally it would be heroku.com if you were using heroku with only a single account.

So you'll need to edit the git remote (you can do this in the .git/config file of your repo on your machine). Change the file to look like:

 [remote "heroku"]
   url = [email protected]:<appname>.git

Note the heroku.work, not heroku.com, and replace <appname> with the name of your app (aka your repo name) on heroku.


I solved this by using the heroku-accounts plugin

see here for instructions

http://martyhaught.com/articles/2010/12/14/managing-multiple-heroku-accounts/


You've got to be accepted as a collaborator on the project you don't own.

It works like this (using git) :

  1. The owner of the project goes to heroku's console for the project
  2. The owner adds the email address of the collaborator (the one that was used to register the collaborator's)
  3. The collaborator sets up his public security key in his account (if he didn't already)
  4. The collaborator adds and sets up the other project as another remote

And that should be all folks ; you just have to push on the other remote when deploying on the other app.


The Heroku plugin https://github.com/ddollar/heroku-accounts has been deprecated. Heroku now maintains its own at https://github.com/heroku/heroku-accounts. Unfortunately it doesn't seem to store project-by-project which account it should be using so you need to run

$ heroku accounts:set account_name

each time you want to use the Heroku command-line tool.

Quick solution for people with access to the bash shell: make a local bin directory (it's already there in Rails applications) and create bin/heroku there. Contents:

#!/bin/bash
/usr/bin/heroku accounts:set account_name
/usr/bin/heroku $*

(replace "project_name" as appropriate) Then run

$ chmod +x bin/heroku

You can then run

$ bin/heroku run console

and it will automatically use the right Heroku account for you. Better still is to add ./bin to your path so you're back to just running:

$ heroku run console


I'd add a couple of things re the heroku-accounts plugin... this example assumes your pre-existing heroku account will be heroku.work and you are adding a new account heroku.personal.

It also describes how to move an app from one to the other, for example, if you have hit your 25-app max and are creating a new account and want to move some of your side projects and experimental apps out of your main account.

  1. You probably need to use the plugin to create BOTH your old and your new accounts, eg, if you had one to start with you can't just add a new heroku.personal, you need to create heroku.work to replace your old one
  2. You'll need to reassign your old apps to your heroku.work
  3. if you are moving an app, don't assign the app to heroku.personal (using heroku accounts:set personal) until after you transfer the app using the heroku sharing commmand as described https://devcenter.heroku.com/articles/transferring-apps

So the steps you probably need are:

  1. Install the heroku-account plugin
  2. Go to heroku.com and create your new acount (if you don't have a second acount already)
  3. run heroku accounts:add work --auto to create a new heroku.work account to replace your old default account (so use the same credentials you've been using all along). You ALSO need to upload your new key to heroku: heroku keys:add ~/.ssh/identity.heroku.work.pub
  4. run heroku accounts:add personal --auto to create a new heroku.personal account (eg use your new credentials for your new heroku account). You ALSO need to upload your new key to heroku: heroku keys:add ~/.ssh/identity.heroku.personal.pub
  5. For each app, cd to the project root then run heroku accounts:set work (all that does it setup git to use your heroku.work, which is (unin this example) the same heroku account you've been using all along, only now it's called heroku.work.
  6. If you want to move an app from heroku.work to heroku.personal, (a) add the new heroku account as a collaborator with heroku sharing:add <new owner email> (b) in your local directory, switch the app to heroku.personal using heroku accounts:set personal (c) transfer** the app from the old account to the new account using heroku sharing:transfer <new owner email> then (d) remove the old email address collaborator (if you want to) using heroku sharing:remove <old owner email>

** Note the heroku link I provided says there are special requirements to move an app with any paid resources. Generally, remove the paid resoures, then add them back later, or have support do it.