Не удалось запустить запрос с использованием Postgrex в Elixir

Я пытаюсь запустить SQL-запрос, используя библиотеку Postgrex:

# lib/dashboard.ex
defmodule Dashboard do
  def init() do
    {:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", database: "postgres")
    pid
  end

  def query(pid) do
    Postgrex.query(pid, "SELECT * from tickets", [])
  end
end

pid = Dashboard.init()
IO.puts Dashboard.query(pid)

Когда я бегу mix runЯ получаю эту ошибку в консоли:

17:34:17.223 [error] GenServer #PID<0.135.0> terminating
** (stop) exited in: GenServer.call(Postgrex.TypeManager, {:get, Postgrex.DefaultTypes, {'localhost', 5432, "postgres"}}, 5000)
    ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
    (elixir) lib/gen_server.ex:824: GenServer.call/3
    lib/postgrex/protocol.ex:650: Postgrex.Protocol.bootstrap/3
    lib/postgrex/protocol.ex:504: Postgrex.Protocol.handshake/2
    lib/db_connection/connection.ex:135: DBConnection.Connection.connect/2
    lib/connection.ex:622: Connection.enter_connect/5
    (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol

Немного предыстории:

  • Когда я проверяю, жив ли процесс, используя Process.alive?(pid) это возвращается true,

  • Кроме того, когда я запускаю приложение с помощью iex -S mixзвонит pid = Dashboard.init() а также Dashboard.query(pid) после этого он работает без ошибок, и я получаю результаты этого запроса в консоли.

  • Каждый раз, когда я запускаю приложение, через mix runЯ получаю тот же PID - #PID<0.135.0>

Итак, вопросы:

  • Как заставить его работать, когда я запускаю приложение через mix run?
  • Почему PID всегда одинаковый, когда я запускаю приложение через mix run? Когда я использую интерактивную консоль, PID отличается для Postgrex.start_link вызов

0 ответов

Другие вопросы по тегам