erix

erix

** (RuntimeError) could not lookup Ecto repo MySQL because it was not started or it does not exist

I realize there are multiple topics with the same title, but the questions and answers in those threads either don’t make sense to me or are not addressing my elephant.

I have followed the instructions on Elixir School: Ecto Basics and I am stuck.

I created a new mix mix new cc. It did not generate an application.ex.

I then set up a repository by running:

$ mix ecto.gen.repo -r Cc.MySQL
* creating lib/cc
* creating lib/cc/my_sql.ex
* creating config/config.exs
Don't forget to add your new repo to your supervision tree
(typically in lib/cc/application.ex):
  • I edited config.exs to add config :cc, ecto_repos: [Cc.MySQL], correct the MySQL creds and add protocol: :tcp:
    import Config
config :cc, Cc.MySQL,
  database: "ecto",
  username: "ecto",
  password: "ecto",
  hostname: "localhost",
  protocol: :tcp

config :cc, ecto_repos: [Cc.MySQL]
  • I edited my_sql.ex to use MyXQL instead of the generated Postgres.
defmodule Cc.MySQL do
  use Ecto.Repo,
    otp_app: :cc,
    adapter: Ecto.Adapters.MyXQL
end

According to the Ecto documentation, I need an application.ex. So I created one in lib/cc/application.ex:

defmodule Cc.Application do
  use Application

  def start(_type, _args) do
    children = [
      Cc.MySQL,
    ]

    opts = [strategy: :one_for_one, name: Cc.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

after compiling the project and running, I use an existing Schema to try insert data:

$ iex -S mix
Compiling 1 file (.ex)
Interactive Elixir (1.16.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> cars = %CC.Cars.Model{agent: "localhost"}
%CC.Cars.Model{
  __meta__: #Ecto.Schema.Metadata<:built, "cars">,
  id: nil,
  date: nil,
  car: nil,
  agent: "localhost",
}
iex(2)> Cc.MySQL.insert!(cars)
** (RuntimeError) could not lookup Ecto repo Cc.MySQL because it was not started or it does not exist

However if I run {:ok, pid} = Cc.MySQL.start_link() in iex directly, I will get a PID. If I then run the command Cc.MySQL.insert!(cars) I will start getting MySQL errors instead.

What am I missing that with allow my app to generate a PID for Cc.MySQL?

Marked As Solved

LostKobrakai

LostKobrakai

Just creating application.ex doesn’t magically have the callbacks in that module be called. You also need to adjust mix.exs for that to happen.

You can run mix new --sup cc for it to create the mix.exs as needed and also have application.ex already be generated by the command.

Also Liked

LostKobrakai

LostKobrakai

Having figured out the difference between the two it doesn’t really matter.

Where Next?

Popular in Questions Top

New
Werner
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”: 14:57:30.512 [warn] ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
Codball
Mix format works fine if run from the cmd. I’ve followed this to facilitate the implementation into VSC which involves downloading an ext...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

Other popular topics Top

shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
fireproofsocks
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New

We're in Beta

About us Mission Statement