If you want to run different code based on the current environment in Elixir it’s generally recommended to use the application configuration to override the behaviours based on the environment. But perhaps all you want to do is run or render something only in production?
For this page I’m using Umami to get some website analytics. However, I’m not interested in getting page views from myself during development.
To solve this I conditionally render the <script>
tag that Umami requires based on the current environment:
<%= if Application.fetch_env!(:my_app, :env) == :prod do %>
<script
async
defer
data-website-id="your-webside-id"
src="yourdomain.com"
></script>
<% end %>
You also need to add the :env
key in your config so that the environment variable can be fetched during runtime:
# config.exs
...
config :my_app, env: config_env()
With this solution my Umami script is only loaded in production and not during development nor tests.