chanphiromsok

chanphiromsok

Hello guys I cant connect to MySQL using ecto_sql and myxql connect to mysql at planetscale

I have config file dev.exs below

config :myproject, Myproject.Repo,
  username: "asdf",
  password: "asdf",
  hostname: "hostname,
  database: "wbdev-db",
  ssl: true,
  ssl_opts: [
    verify: :verify_peer,
    cacertfile: CAStore.file_path(),
    server_name_indication: String.to_charlist("hostname"),
    customize_hostname_check: [
      match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
    ]
  ],
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10

Error message

** (UndefinedFunctionError) function CAStore.file_path/0 is undefined (module CAStore is not available)
    CAStore.file_path()
    /Users/macbookpro/Documents/myproject/config/dev.exs:12: (file)
    /Users/macbookpro/Documents/myproject/config/config.exs:64: (file)
    (stdlib 4.2) erl_eval.erl:748: :erl_eval.do_apply/7
    (stdlib 4.2) erl_eval.erl:961: :erl_eval.expr_list/7
    (stdlib 4.2) erl_eval.erl:290: :erl_eval.expr/6
    (stdlib 4.2) erl_eval.erl:282: :erl_eval.expr/6

CAStore is undefined if I run it in Supervisor tree it work fine MyXQL.start_link(db_config)

Showing Posts 1 to 10

codeanpeace

codeanpeace

What does your CAStore module look like? It might be a namespacing issue.

For example, if you have something like defmodule Myproject.CAStore, you’d need to alias it or use the full module name in your dev.exs.

# either add
alias Myproject.CAStore
# or use
Myproject.CAStore.file_path()
# instead of
CAStore.file_path()
chanphiromsok

chanphiromsok OP

Thank for response. CAStore is work when I start it in application.ex for me I want to config in dev.exs and runtime.exs CAStore is not work

codeanpeace

codeanpeace

Can you share your working application.ex and ca_store.ex?

chanphiromsok

chanphiromsok OP

sorry ca_store.ex doesn’t exist cause
here is my application.ex I think CAStore might use in Ecto Im not sure

defmodule Wb.Application do
  # See https://hexdocs.pm/elixir/Application.html
  # for more information on OTP Applications
  @moduledoc false

  use Application

  @impl true
  def start(_type, _args) do
    children = [
      # Start the Telemetry supervisor
      WbWeb.Telemetry,
      # Start the Ecto repository
      # Wb.Repo,
      # Start the PubSub system
      {Phoenix.PubSub, name: Wb.PubSub},
      WbWeb.Presence,
      # Start the Endpoint (http/https)
      WbWeb.Endpoint,
      # Start a worker by calling: Wb.Worker.start_link(arg)
      # {Wb.Worker, arg}
      Wb.Tracker.TrackerSupervisor,
      {
        MyXQL,
        username: "",
        database: "wbdev-db",
        hostname: "",
        password: "",
        ssl: true,
        ssl_opts: [
          verify: :verify_peer,
          cacertfile: CAStore.file_path(),
          server_name_indication: String.to_charlist("aws.connect.psdb.cloud"),
          customize_hostname_check: [
            match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
          ]
        ],
      }
    ]

    # See https://hexdocs.pm/elixir/Supervisor.html
    # for other strategies and supported options
    opts = [strategy: :one_for_one, name: Wb.Supervisor]
    Supervisor.start_link(children, opts)
  end

  # Tell Phoenix to update the endpoint configuration
  # whenever the application is updated.
  @impl true
  def config_change(changed, _new, removed) do
    WbWeb.Endpoint.config_change(changed, removed)
    :ok
  end
end
wojtekmach

wojtekmach

Hex Core Team

Can you show your mix.exs? Do you have the :castore package in the deps?

codeanpeace

codeanpeace

Ahh, CAStore.file_path() is from the dependency castore.

Would config files even have access to dependencies? If I recall correctly, config files are read at build time, which is before the application gets compiled and its dependencies loaded.

Edited To Add: https://elixir-lang.org/getting-started/mix-otp/config-and-releases.html#configuration

Configuration

Configuration files provide a mechanism for us to configure the environment of any application. Elixir provides two configuration entry points:

  • config/config.exs - this file is read at build time, before we compile our application and before we even load our dependencies. This means we can’t access the code in our application nor in our dependencies. However, it means we can control how they are compiled
  • config/runtime.exs - this file is read after our application and dependencies are compiled and therefore it can configure how our application works at runtime. If you want to read system environment variables (via System.get_env/1) or any sort of external configuration, this is the appropriate place to do so
chanphiromsok

chanphiromsok OP

I have installed it and test it doesn’t work

chanphiromsok

chanphiromsok OP

thanks you I will try another solution

scull7

scull7

Were you able to resolve this? The planetscale connection configuration tool suggests to add the following to your dev.exs which seems to be incorrect. I see that you’ve done the same in your project.

hostname = "aws.connect.psdb.cloud"
{:ok, pid} = MyXQL.start_link(username: "*******",
  database: "*******",
  hostname: hostname,
  password: System.get_env("DATABASE_PASSWORD"),
  ssl: true,
  ssl_opts: [
    verify: :verify_peer,
    cacertfile: CAStore.file_path(),
    server_name_indication: String.to_charlist(hostname),
    customize_hostname_check: [
      match_fun: :public_key.pkix_verify_hostname_match_fun(:https)
    ]
  ]
)
chanphiromsok

chanphiromsok OP

my config in dev.exs username and password I remove it bcoz it can be public

  • the reason that It doest work and error CAStore is undefined
  • MySQL it not working with EtcoSQL can config with Repo
  • if start MyXQL under the Supervisor tree (application.ex) it work.

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
matt-savvy
Anyone here using Honeybadger? My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of Bandit.HTTPError...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
webofbits
Aludel - LLM Evaluation Workbench Aludel is an embeddable Phoenix LiveView dashboard for evaluating and comparing LLM prompts across mult...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews