[ACE] Does the /installed lifecycle route need to be explicitly defined?

I am developing an app for Confluence using Atlassian Connect Express. When I run the app locally in the development environment, the app installs and works as expected. However, once deployed, I am unable to install the app (the request to the /installed lifecycle method times out). Do I need to explicitly define the /installed route in my app to return a 200 response, in order for the app to install on production? Or does ACE handle the route on production, as well?

I’ve searched the developer community and have seen conflicting answers on this subject, so I was wondering if anyone knew for certain. Thank you!

EDIT: For the record, I am using ACE v4.0.1

Hi Zena,
You don’t need to explicitly define it, because that’s one of the things ACE does under the hood for you. That’s the whole point behind ACE. By the way, returning a 200 response is not enough and ACED does a whole lot of other stuff processing the installation callback under the hood. I would look at connectivity issues between Confluence and the deployed app environment to figure out why it times out.
Cheers,
Norman

Although you got a response from a staff member, I’m still going to say that in my personal experience with a couple of apps, we’ve had to manually define the /installed route to return something otherwise it never worked.
And on a side note, even though it should automatically save the tenant data to the DB, that wasn’t happening, so we had to call the function for storing into the DB manually. That might be related to using a MySQL DB…

This was with ACE ~ 3.5.x

Thank you for your response! I’d like to mark this as the solution, but @ChupaCabra’s response below gives me pause. @natashbar, are you able to speak to why that may have been the case for them?

@zena I might be wrong, but it would be very strange if that is the case. Looking at the code, the framework seems to be registering the /installed path: https://bitbucket.org/atlassian/atlassian-connect-express/annotate/master/lib/index.js?at=master&fileviewer=file-view-default#index.js-150
It calls verifyInstallation(), which is required in order to handle the installation callback properly, before storing client info.
@nmansilla / @aagrawal2 can you please weigh in here? You made changes to ACE recently, you will know better.

Hi @zena,
The ACE framework does register the /installed and it shouldn’t matter whether it’s your local test environment or production. My guess is that your problem may be due to differences in the configurations of the two environments. One thing I’ve done in the past to help with configuration issues is to add an endpoint that returns the configuration. Be careful not to expose credentials/tokens insecurely though.
Regards,
Dugald

Hi @zena,
Did you manage to fix your problem?
Regards,
Dugald

@dmorrow
Is it possible to customize /installed route,
Use Cases:

  1. changing the route path to something like: /custom_path/installed
  2. Not using a DB for production and intercepting installation data for custom persistence

Hi @RhythmGarg ,

Yes, you can customize the paths of your app’s lifecycle endpoints. They must, however, be relative to your app’s baseUrl.

Regards,
Dugald