Application.start() or .start_phase() for database tasks?

During deploying a new fresh release, I want my application to run some custom database content tasks, similar to seeds, upon starting up. It’ll run them via Code.eval_file(file_name), that is, there may be many exs file to run, in a given release, or none.

Where in Application should I run them?

They may take, say, a minute or a few ones to finish, which is a long time for them to execute them in start, right? Or should I create a new process via Task.async / Task.start / spawn in start() instead? Or should I use start_phase(), and if so, how will it improve the process?

One question on what you are trying to do? Do these tasks, that you wanted to run, run every time after the deployment, or you want them to run only once for the next deployment.

one, or the other, or both

If you just need something to be started every time you use your app’s main command with Elixir releases then just putting code in config/runtime.exs should be enough.