Bolt.Sips problem with Neo4j

Hi there!

I have a problem with Bolt.Sips and Phoenix. I configured my phoenix app for Bolt as explained in the github page of Bolt.sips but I have the following error while invoking Bolt.Sips.conn : (MatchError) no match of right hand side value: []

It’s like the config file is not taken into account. I don’t understand what’s happening. If someone can help me, it would be fantastic! :wink:

Here is my mix.ex file :

def application do
    [mod: {ElmDbz, []},
     applications: [:phoenix, :phoenix_html, :bolt_sips, :cowboy, :logger, :gettext]]
  end

defp deps do
    [{:phoenix, "~> 1.1.6"},
     {:phoenix_html, "~> 2.4"},
     {:phoenix_live_reload, "~> 1.0", only: :dev},
     {:gettext, "~> 0.9"},
     {:cowboy, "~> 1.0"},
     {:bolt_sips, "~>0.1"},
     {:boltex, github: "florinpatrascu/boltex"}]
  end

And the config.ex file :

config :bolt_sips, Bolt,
  hostname: 'localhost',
  basic_auth: [username: "neo4j", password: "***"]

And the controller :

defmodule ElmDbz.CharacterController do
  use ElmDbz.Web, :controller

  alias Bolt.Sips, as: Bolt

  def index(conn, _params) do
    cypher = """
      MATCH (p:Person) RETURN p as character
    """

    data = Bolt.query!(Bolt.conn, cypher)
    render(conn, "index.json", characters: data)
  end

end

Is it a typo or is your config file called config.ex? It should be config.exs.

Also I do not know how the engine does handle the newlines before and after your query, please try to use a single-double-quoted string instead.

PS: I never used that package nor do I even know what it does, nor did I use neo4j.

Yes, it’s a typo, sorry. It’s config.exs. I just look at github’s author : https://github.com/florinpatrascu/bolt_movies_elixir_phoenix. He is querying with multiple lines, so I did the same.

I’m pretty sure this is a configuration problem because when I use Bolt.Sips in iex, it works :

iex> {:ok, _p} = Bolt.Sips.start_link(host: “localhost”)
iex> conn = Bolt.Sips.conn
iex> Bolt.Sips.query!(conn, “MATCH (p:Person) RETURN p as character”)

First thing I stumble upon is starting the worker in the supervisor via worker(Bolt.Sips, [Application.get_env(:bolt_sips, Bolt)]), he does read the configuration manually and pass it to the worker.

You are not showing how you do handle your supervisor, so I assume you are not even having the worker in your supervision tree.