Ecto create a repo error

I wish to use Ecto for a project but when I realize the command mix ecto.create I have the following error Invalid Elixir version requirement in mix.exs file. However, I have the same version in this file as that at present used. I tried with of other one versions but the error is always present. Can you help me?

Can you please provide the exact output of the mix ecto.create run? Also the content of your mix.exs might help us.

Hy NobbZ, thanks for your answer.
This is the exact output :
12

And this is the Mix.exs file :
11

Dont use sudo!

root will probably see a different version of elixir than theo does in his current environment.

Why do You need sudo to run mix ecto.create?

Running with sudo change your identity, it changes also asdf setup because it is on a per user setup I think.

You could try to really check this.

$ sudo asdf current elixir

Usually asdf is installed “per user”, so I assume that root won’t even see the asdf script/function (however its implemented).

2 Likes

PS: Please do not post screenshots of code or your shell, use proper copy and paste to get the content in the post and then use either 4 spaces indentation per line or wrap it into triple backticks (```) to mark the code block as such as you are used to it from your favorite markdown dialect.

This makes reading and especially copying them a lot easier (and uses less bandwith of my mobile dataplan).

Oh, and you will probably need to sudo rm -rf _build deps before using mix without sudo again to “repair” ownerships and permissions.

1 Like

Thanks guy, you were right it was a problem at sudo. However, I have another error at the same stage and I do not know what to do.
Error message :
(Mix) The database for Farmbot.Repo couldn’t be created: an exception was raised:
** (RuntimeError) Connect raised a KeyError error. The exception details are hidden, as
they may contain sensitive data such as database credentials.

    (elixir) lib/keyword.ex:377: Keyword.fetch!/2
    (postgrex) lib/postgrex/protocol.ex:610: Postgrex.Protocol.auth_md5/4
    (postgrex) lib/postgrex/protocol.ex:504: Postgrex.Protocol.handshake/2
    (db_connection) lib/db_connection/connection.ex:135: DBConnection.Connection.connect/2
    (connection) lib/connection.ex:622: Connection.enter_connect/5
    (stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3

Have you an idea of what can I do ?

You should check your credentials. It is located in the config folder of your farmbot application.

You should match that the user specified is allowed to use database.

In case not… You might look at https://www.postgresql.org/docs/9.5/static/sql-createuser.html

1 Like

I’m using ecto with mariadb (Mariaex) in a non-Phoenix app. This is my database config:

# config/config.exs
config :iocp_monitor, ecto_repos: [IocpMonitor.Repo]

config :iocp_monitor, IocpMonitor.Repo,
    database: "iocp",
    username: "root",
    password: "1q2w3e4r5t",
    hostname: "localhost",
    port: "3306",
    migration_timestamps: [type: :utc_datetime]

And this is my repo definition:

defmodule IocpMonitor.Repo do
  use Ecto.Repo,
    otp_app: :iocp_monitor,
    adapter: Ecto.Adapters.MySQL
end

When I run mix ecto.create and mix ecto.migrate, they finished successfully, and I can see the new database and the new tables in it, so I suppose the database connection configuration is correct. But when I try to start my otp app, this happens:

13:22:08.399 [error] GenServer #PID<0.421.0> terminating
** (RuntimeError) connect raised ArgumentError exception.The exception details are hidden, as they may contain sensitive data such as database credentials. You may set :show_sensitive_data_on_connection_error to true if you wish to see all of the details
    :erlang.byte_size/1
    (mariaex) lib/mariaex/messages.ex:103: Mariaex.Messages.encode_handshake_resp/1
    (mariaex) lib/mariaex/messages.ex:219: Mariaex.Messages.encode/2
    (mariaex) lib/mariaex/protocol.ex:1156: Mariaex.Protocol.msg_send/3
    (mariaex) lib/mariaex/protocol.ex:218: Mariaex.Protocol.handle_handshake/3
    (mariaex) lib/mariaex/protocol.ex:171: Mariaex.Protocol.handshake_recv/2
    (db_connection) lib/db_connection/connection.ex:66: DBConnection.Connection.connect/2
    (connection) lib/connection.ex:622: Connection.enter_connect/5
Last message: nil
State: Mariaex.Protocol

I have no idea why it fails, and I don’t know where to add the configuration :show_sensitive_data_on_connection_error. Can anyone help? Thanks in advance.

1 Like

I have the same problem, I don’t have idea where to put :show_sensitive_data_on_connection_error

config :my_app, MyApp.Repo,
  # Help diagnose connection errors:
  show_sensitive_data_on_connection_error: true
6 Likes