With Hanami you can build your project by following the Monolith-First principle. As you add more code to the project, you can grow it organically, by splitting the project into several Hanami apps.
A real world Hanami project could have dozens of Hanami apps in the same project (for example, web
for the front-end, admin
for the administration, api
for a JSON API, etc…) You might want to deploy them to different servers, even though they’re all a part of the same project. For example, most of the servers could be used for the web
app (for customers on the site), a couple could be used for an api
(perhaps for customers using mobile apps), and you could have a single server running and admin
application, since it’ll likely get less traffic than the other two.
We support this, with selective booting:
# config/environment.rb
# ...
Hanami.configure do
if Hanami.app?(:web)
require_relative '../apps/web/application'
mount Web::Application, at: '/'
end
if Hanami.app?(:api)
require_relative '../apps/api/application'
mount Api::Application, at: '/api'
end
if Hanami.app?(:admin)
require_relative '../apps/admin/application'
mount Admin::Application, at: '/admin'
end
end
You can declare which apps to use with the HANAMI_APPS
environment variable. You can provide a single app, or several apps (joined with commas):
$ HANAMI_APPS=web,api bundle exec hanami server
This would start only the web
and api
applications.