I want to deploy a single codebase to two different Heroku apps. I'd like one of the apps to launch an API service, which is a small Rack app defined in the same codebase of our much larger web app that uses Rails.
Ideally, I'd like to set something on the api app to use a different app root (and hence different Procfile) for launching the API. This way I can maintain one codebase, but a separate, lightweight API service that still has access to things like models etc...
Is this possible? I can't find anything in the docs.
My only other thought was to define a config variable that is the service to actually launch, then use that in the Procfile<https://gist.github.com/1752849>, but this seems a bit messy and possibly error prone. It would be much nicer if I could specify which Procfile to use or change the root directory of the app to launch on a per-app basis.
From what I know of Procfiles, it's routine and reliable to have environment variables available to your Procfile, so I'm not sure that the gist approach you link to is as messy and error-prone as you might think.
If you were to abstract it one layer down so that your rack processes pickup which application they're meant to be running, you're still essentially doing the same thing, but in a different place.
To be honest, there's probably a billion ways of doing this, all of which have some sort of pain. The approach I've taken in the past is either to have two deployable branches which go to different applications on Heroku, or do abstract the common code out and share it with two deployable applications.
However, saying this, stipulating the web command in your environment seems a fairly reasonable way of tackling this.
On Monday, 6 February 2012 at 16:01, Bradley wrote: > I want to deploy a single codebase to two different Heroku apps. I'd like one of the apps to launch an API service, which is a small Rack app defined in the same codebase of our much larger web app that uses Rails.
> Ideally, I'd like to set something on the api app to use a different app root (and hence different Procfile) for launching the API. This way I can maintain one codebase, but a separate, lightweight API service that still has access to things like models etc...
> Is this possible? I can't find anything in the docs.
> My only other thought was to define a config variable that is the service to actually launch, then use that in the Procfile (https://gist.github.com/1752849), but this seems a bit messy and possibly error prone. It would be much nicer if I could specify which Procfile to use or change the root directory of the app to launch on a per-app basis.
> -- > You received this message because you are subscribed to the Google Groups "Heroku" group. > To view this discussion on the web visit https://groups.google.com/d/msg/heroku/-/A4tMaN2jXTMJ. > To post to this group, send email to heroku@googlegroups.com (mailto:heroku@googlegroups.com). > To unsubscribe from this group, send email to heroku+unsubscribe@googlegroups.com (mailto:heroku+unsubscribe@googlegroups.com). > For more options, visit this group at http://groups.google.com/group/heroku?hl=en.
So potential errors aren't the only concern. If my API uses different workers/process etc. from the App it becomes a bit onerous to define all these different process types using config vars...
Definitely don't want to split my code out (yet) if I can get away with it. I wonder if anyone at Heroku can comment on this? Presumably they have an internal mechanism for finding the Procfile, it would be great if this was configurable.
On Monday, 6 February 2012 at 20:16, Bradley wrote: > So potential errors aren't the only concern. If my API uses different workers/process etc. from the App it becomes a bit onerous to define all these different process types using config vars...
Sure, but remember that Heroku won't scale any of the other processes unless you ask it to. You can easily declare all the other processes in the Procfile and scale them as needs be for each deployment of the application (so the names would need to be unique), only your web process would need to be configurable.
> Definitely don't want to split my code out (yet) if I can get away with it. I wonder if anyone at Heroku can comment on this? Presumably they have an internal mechanism for finding the Procfile, it would be great if this was configurable.
If there is it isn't something that they mention in the docs ("Process types are declared via a file named Procfile placed in the root of your app.") nor is it something that you really have control with with custom build packs (unless you want to get /really/ fruity).
On Mon, Feb 06, 2012 at 08:01:49AM -0800, Bradley wrote: > I want to deploy a single codebase to two different Heroku apps. I'd like > one of the apps to launch an API service, which is a small Rack app defined > in the same codebase of our much larger web app that uses Rails.
> Ideally, I'd like to set something on the api app to use a different app > root (and hence different Procfile) for launching the API. This way I can > maintain one codebase, but a separate, lightweight API service that still > has access to things like models etc...
> Is this possible? I can't find anything in the docs.
> My only other thought was to define a config variable that is the service > to actually launch, then use that in the Procfile<https://gist.github.com/1752849>, > but this seems a bit messy and possibly error prone. It would be much > nicer if I could specify which Procfile to use or change the root directory > of the app to launch on a per-app basis.