laurenfackler
To quickly test changes to email template copy and styling, I created a couple routes that are only accessible in the dev environment:
if Mix.env() == :dev do
get("/email_previews", EmailPreviewController, :index)
get("/email_previews/:email", EmailPreviewController, :show)
end
However, this now means that there is a template file that references a path helper function that doesn’t exist in other environments:
<ul>
<%= for email <- @emails do %>
<li><a href="<%= email_preview_path(@conn, :show, to_string(email)) %>"><%= email %></a></li>
<% end %>
</ul>
which prevents the app from compiling:
** (CompileError) lib/my_app_web/templates/email_preview/index.html.eex:9: undefined function email_preview_path/3
How can I get the app to compile?
Trending in Questions
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
Hello,
I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind.
However, when I launch mix phx.server, I get an error...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
I’m working on a small exercise involving update_in/3, and I came up with this solution:
data = %{
name: "Periodic Table",
category:...
New
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication):
toke...
New
Is there any way to avoid the Hologram compiler running when using iex? It seems like the front-end code could potentially be disregarded...
New
** (ArgumentError) expected :max_attempts to be a positive integer, got: {:@, [line: 10, column: 19], [{:max_attempts, [line: 10, column:...
New
Other Trending Topics
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
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










Marked As Solved- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
andrejsm
Simply don’t use the compiled path functions. Instead type them as strings and interpolate values.
Also Liked
mudasobwa
When one needs different modules to be compiled in different environments, it’d be better to explicitly define these module sets, instead of polluting the source code with conditionals.
For the modules to be available in
:testonly, the common approach is to createtest/supportfolder, and modify yourmix.exsin the following way:Mix.Project.project/0callback to include the following key/value pair:testenvironment there.That way all of them will be compiled in
testand discarded in all other environments.If you need some modules to exist in
:prodonly, declare compile paths appropriately.benwilson512
Right, the
if Mix.env == :dev docall in the router happens at compile time because it’s in the module body.benwilson512
You don’t want to do
Mix.envcalls at runtime. Does theemail_preview_pathexist in a view that only is needed in dev?Last Post!
laurenfackler
Right, yes. I am already using that feature of Swoosh. However, I wanted a slightly different solution where I could quickly preview any email without having to manually go through the user flows within my application (e.g. filling out forms). Unless, I’m completely missing something in the README…
What I created, allows me to visit http://localhost:4000/email_previews and see a list of links to preview all my apps emails:
I also created a gist for anyone else who might stumble across this thread and want the same: