I just started a full-time job as a Elixir developer .
Previously I worked mostly with Ruby stack and we used a lot Procfile with foreman 5 to start complex applications (e.g. I need to start one job worker, front-end server and the application itself).
Didn’t find anything like this for Elixir projects. Maybe you have tips and/or suggestions how you solve?
I have no clue what a Procfile is, but usually I’d start services via systemd and let it handle dependencies as well.
In development its of course a bit different, there I’d have a script which kicks off and shuts down a bunch of docker containers for external services.
Also as long as your other stuff is running on the BEAM itself, you can add them as dependency and they will be started by the BEAM during your Apps start up process.
If I actually got your question wrong, please refine
I do the same thing: systemd to start the BEAM, and all other things are applications included in the BEAM so they don’t need to be started themselves.
If you have a lot of dependencies outside of Elixir (i.e. you do have to use Redis, an NPM server to serve a web-application that includes server-side rendering, and you have an SQL database) then I think any existing tooling should work well; what would an elixir-specific tool for something like this add?
Okay, I now had some time to spare and google, and I learned that a procfile is specific to heroku, so if you want to stick to heroku, you’ll have no other option than to continue using this procfile…
Dunno, haven’t continue reading after reaching the word “heroku” in googles definition box, which said this:
A Procfile is a mechanism for declaring what commands are run by your application’s dynos on the Heroku platform. It follows the process model. Mar 15, 2018
On a quick glance, it seems to be a flat yaml (only one level) where the keys are your node/dyno names and the values are a single command to run to start your server on that node/dyno.
Hi, the foreman gem isn’t specific to the Ruby Language because it can be used with many different languages and frameworks.
Next, if these processes are Erlang processes, then one can use supervisors to startup dependent processes depending on your overall process architecture.
At this time, I prefer working with Docker and Kubernetes because I can easily setup and execute the same environment locally that will eventually run in staging and production.
In short, the tools that you have learned in the past may be still relevant in the now. Also, look at leveraging general purpose tools that can used across languages and frameworks.
If you’re starting multiple applications in multiple languages, continue using foreman! If it’s a tool that’s worked well for you in the past (and you have Ruby installed on your machine) there’s no reason to switch now.
If it’s all Elixir/Erlang things you wish to start I would ask why do you want to use more than one VM?
In the Ruby world I might create a new operating system process to perform some work concurrently, but with Elixir/Erlang I just add more processes to my supervision tree. Easier to manage, and more performant