benonymus
Different error on dev and production
Hey there,
When I upload a file that is too big, in dev I am getting the phoenix error that looks like this:
Plug.Parsers.RequestTooLargeError at POST/topics/4gvJMZkdbBpN0e65/post_attachment
the request is too large. If you are willing to process larger requests, please give a :length to Plug.Parsers
and has a status of: 413 Request Entity Too Large
but when I deploy the app this error gets swallowed it seems, and just an empty 500 is returned.
in the AWS logs I can see the 413.
How to handle this error to have the same error the same way on both environments?
Most Liked
axelson
Hmmm, I wonder if that error message could be improved to guide users to the correct fix for their needs. At the very least I believe we can say that when only html is specified in render_errors that only an iolist or binary are valid inputs and other inputs should result in an error message.
OvermindDL1
Not the view name but rather what ‘higher up’ in the callstack is calling your render function. In a base error rendrerer there’s very little above it and I’m not sure if the content-type requested by the client is followed or not (since it’s an error and the body shouldn’t be used for data anyway).
You can always return the stacktrace in that function and see what it’s going through, there might be an option? ![]()
Edit: Googled a bit and the Phoenix View documentation shows rendering JSON from a map in an example. So it should work.
That’s for rendering from controllers, not errors though, I’m unsure about error handling.
jola
I’m curious what the content-type is of the response then.
@OvermindDL1 as far as I can tell, the error view is set as a config option on the endpoint (render_errors) where you can specify a list of content types. Generating a fresh phoenix app with no HTML gives you an error view that has this comment
# If you want to customize a particular status code
# for a certain format, you may uncomment below.
# def render("500.json", _assigns) do
# %{errors: %{detail: "Internal Server Error"}}
# end
so I see no reason why returning maps wouldn’t work here either.
In fact, @benonymus, I’m curious what your render_errors config option looks like in config/config.exs, config/dev.exs and config/prod.exs. Maybe you’ve put JSON in one and HTML in another? It should look something like this
render_errors: [view: HelloWeb.ErrorView, accepts: ~w(json)],







