(代码在https://github.com/fabianhjr/AseguradoraElixir/tree/fcfeacbee1ec9bc9f59bb01e65743983ae0986d3上的Github上方)
尝试在某些模型中使用Ecto / Postgrex我在Repository insert上获得了意外的输出。(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连接到数据库,手动完成了模式,因为混合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
答案 0 :(得分:2)
似乎某处某处是直接用spawn_link或类似方法生成一个进程,这就是为什么你没有得到一个好的错误报告。建议使用Task.start_link / 1有两个原因:
因此,如果您需要返回值,我建议您使用Task.start_link / 1或Task.async / 1 + Task.await / 1。这应该会给你一个更好的堆栈跟踪,从而帮助你理解真正发生的事情。
PS:有可能Erlang 18将包含一种为“裸进程”自定义错误报告的方法,那么使用Task的主要原因基本上就是将它们嵌入到监督树中。