ojinari
I compile and deploy my Phoenix projects manually, with no third-party library such distillery, and with a help of the commands “mix compile” and “mix release”, basically.
I need a way to run custom commands or tasks on a server in the production mode. It’d be similar to running migrations. But I’ve bewildered as for how it’s done. A project itself may or may not be up and running when a command or task is being executed. And I need to be able to pass some arguments to a said command-task.
How to do it?
- I’m aware of
defmodule Mix.Tasks.MyTask1 do .... but how would I do it in production, on a server? Is this even a proper and recommended way to run them on a server in production?
-
I’m aware of
bin/my_app eval 'MyProject.MyTask1'but why does it exist if there’s the other abovementioned approach? Again, is this one a proper and recommended way to run them on a server in production? -
Are there other approaches?
I’m bewildered. Which one to use, in what circumstances? How to use them properly?
Trending in Discussions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ai
- #ecto-query
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #metaprogramming
- #hex










Showing Posts 1 to 6- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
tao
Your second option (
/bin/app eval …) looks right. Mix is a build tool and is not a part of your release. There’s a nice example of how this can be done in the Phoenix “Deploying with releases” docs.For passing arguments, you should be able to just pass them as arguments to the command you’re running — the mix release docs have the example of
bin/RELEASE_NAME eval "IO.puts(:hello)".ojinari
That doesn’t answer the question of “how to pass an argument to my custom function”
because it passes some code to
evalFor instance:
``
How to pass a1, b1, c1 to
abc()in?
John-Goff
Just pass them? Eg
You’re basically calling a function the same way as you would in IEx, so you can pass any elixir data type.
gpreston
Add-on to this which is not super clear from this section of the docs:
I was trying to forward command-line arguments directly to my Elixir code being run. Doing it the naive way doesn’t work for arbitrary unexpected numbers of arguments and other reasons:
There is a supported way to forward the command line arguments though:
The command line arguments can then be accessed in your Elixir code using System.argv(). Hope this helps anyone facing the same problem. This seems like a better solution to me for anything more complex than passing hard-coded values from the shell script.
rugyoga
If you’ve deployed your app using releases, it’s straightforward to fire up iex:
BartOtten
Have you considered contributing the improvements to the official documentation?