belaustegui
"The Inspect protocol has already been consolidated" for Ecto schema with redacted field
I’ve recently started a new Phoenix project using Elixir 1.11, Phoenix 1.5 and Ecto 3.5.
Everything runs smoothly but there is a recurrent warning in ElixirLS which I can not fix. The warning says:
the Inspect protocol has already been consolidated, an implementation for MyApp.User has no effect. If you want to implement protocols after compilation or during tests, check the “Consolidation” section in the Protocol module documentation
The warning is highlighted in the Ecto schema declaration:
The thing is: the module does not implement the Inspect protocol. I know I can disable protocol consolidation in development to make this warning disappear, but I would like to know what is causing it. It only happens in this schema and not in the resto of Ecto schemas I have implemented.
EDIT
I’ve dived into the Ecto.Schema.schema() code and found this code which I belive is causing the warning:
if redacted_fields != [] and not List.keymember?(@derive, Inspect, 0) and
@ecto_derive_inspect_for_redacted_fields do
@derive {Inspect, except: @ecto_redact_fields}
end
My schema has a field :password, :string, virtual: true, redact: true which triggers this code and derives the Inspect protocol for my schema.
So, now that I know where this comes from. Is there a way to fix this warning? Should I report it as a bug in Ecto?
Most Liked
zac
I’m running into the same issue with a simple (demo) Ash Framework project. As soon as I added more than the basic persistence, started seeing:
warning: the Inspect protocol has already been consolidated, an implementation for Helpdesk.Support.Ticket has no effect. If you want to implement protocols after compilation or during tests, check the "Consolidation" section in the Protocol module documentation
lib/helpdesk/support/resources/ticket.ex:1
The code is pretty simple:
defmodule Helpdesk.Support.Ticket do
use Ash.Resource
actions do
defaults [:create, :read, :update, :destroy]
create :open do
accept [:subject]
end
end
attributes do
uuid_primary_key :id
attribute :subject, :string do
allow_nil? false
end
attribute :status, :atom do
constraints [one_of: [:open, :closed]]
default :open
allow_nil? false
end
end
end
lukaszsamson
i-n-g-m-a-r
Last Post!
manuel-rubio
I have recently a project using only Ecto, and if I configure a field as redact: true it’s still happening with Ecto 3.13. Even putting consolidate_protocols: Mix.env() != :dev and running in the console (ensuring MIX_ENV=dev) appears the warning.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex










