【发布时间】:2015-01-24 20:21:27
【问题描述】:
(代码在 Github https://github.com/fabianhjr/AseguradoraElixir/tree/fcfeacbee1ec9bc9f59bb01e65743983ae0986d3)
尝试将 Ecto/Postgrex 与某些模型一起使用时,我在存储库插入时得到了意外的输出。(lib/main.ex:63)
62 %Cliente{nombre: nombre, direccion: direccion, telefono: telefono, email: email}
63 |> Db.insert
得到以下错误
07:08:32.063 [error] Error in process <0.148.0> with exit value: {#{'__exception__'=>true,'__struct__'=>'Elixir.Postgrex.Error',message=>nil,postgres=>#{code=><<5 bytes>>,file=><<10 bytes>>,line=><<3 bytes>>,message=><<44 bytes>>,routine=><<12 bytes>>,severity=><<5 bytes>>}},[{'Elixir.Ecto.Adapters.Postgres.Worker','query!',4,[{file,"lib/ecto/adapters/postg...
我使用 pgAdmin 连接到数据库,手动完成了架构,因为 mix ecto.gen.migration / mix ecto.migrate 似乎被破坏了。 (我从 elixir 开始,所以我可能做错了什么,有人指出我在 mix.exs 中检查我的入口点,我认为它们很好)我尝试使用 IO.inspect,但它仍然很丑陋且不可读。(存储库.get [Model] [id] 不会崩溃,只是返回 nil)
任何正确方向的指针将不胜感激。
更新 感谢 Jose 提供更好的错误消息
09:13:04.292 [error] Task #PID<0.151.0> started from #PID<0.135.0> terminating
Function: #Function<20.90072148/0 in :erl_eval.expr/5>
Args: []
** (exit) an exception was raised:
** (Postgrex.Error) FATAL (3D000): database "aseguradora simple" does not exist
lib/ecto/adapters/postgres/worker.ex:18: Ecto.Adapters.Postgres.Worker.query!/4
lib/ecto/adapters/postgres.ex:357: Ecto.Adapters.Postgres.use_worker/3
lib/ecto/adapters/postgres.ex:90: Ecto.Adapters.Postgres.insert/3
lib/ecto/repo/backend.ex:91: Ecto.Repo.Backend.insert/4
(elixir) lib/task/supervised.ex:74: Task.Supervised.do_apply/2
(elixir) lib/task/supervised.ex:19: Task.Supervised.async/3
(stdlib) proc_lib.erl:237: :proc_lib.init_p_do_apply/3
【问题讨论】:
-
这是一个非常可怕的错误。当您在
Task.async(fn -> ... existing code ... end) |> Task.await中执行相同的操作时会发生什么。你至少得到一个更好的错误吗? -
谢谢,会尽快检查。
-
没有所有的迁移,我的傻。非常感谢,它确实帮助我调试了这个。
-
我很高兴你修好了它!尽管您最初收到如此糟糕的错误消息,但我感到很惊讶。您是否直接产生了新进程?如果是这样,请考虑使用 Task.start/Task.start_link 来创建新进程,因为它总是意味着更好的错误消息。 :)
-
@FabiánHerediaMontiel 请回答您自己的问题并将该答案标记为已接受。这让未来的访问者可以快速找到修复并清楚地表明问题已解决。谢谢。