When debugging with
IEx.pry(), I got used to that I have to run my tests with a special command
iex -S mix test --trace ... (otherwise, pry won’t even start, or test cases will timeout too soon).
Unfortunately, that’s not enough when you’re debugging an Ecto-based app/library. If you use the pry debugger during a db transaction, it will timeout, because default Ecto db timeout is 15 s. Thus, when debugging you also have to remember about manually changing your repos db timeout config. Otherwise you’ll see errors like
Postgrex.Protocol (#PID<0.16080.0>) disconnected: ** (DBConnection.ConnectionError) client #PID<0.16746.0> timed out because it queued and checked out the connection for longer than 15000m while debugging and you’ll have to restart the whole test process.
That annoys me! Such manual steps make debugging harder than it should be.
Can I “detect” anyhow that I’m in a
mix test --trace mode? Why don’t we change default Ecto timeout settings in such a case to
:infinity for all the users in test trace mode?
P.S. The current workaround we found for this problem is to add the following into
config :my_app, MyApp.Repo, timeout: (if(System.get_env("CI")) do 15000 else :infinity end), ownership_timeout: (if(System.get_env("CI")) do 120_000 else :infinity end)
This isn’t perfect yet though, as it’ll make the db timeout infinite also when you’re not in a trace mode. (I don’t know how can I detect “am I in trace mode?”.)