2017-10-20 3 views
1

Je suis en train de définir une configuration bibliothèque pour pointer vers un chemin de fichier (un geoip db) dans priv: »en utilisant Application.app_dir (: my_app, "PRIV") dans config.exs

config :geolix, databases: [ 
    %{ 
    id:  :city, 
    adapter: Geolix.Adapter.MMDB2, 
    source: Application.app_dir(:zipbooks, "priv") |> Path.join("data/GeoLite2-City.mmdb") 
    } 
] 

mais mon

config :zipbooks, … 

est dans le même fichier en haut. Je reçois cette erreur:

** (Mix.Config.LoadError) could not load config config/config.exs 
    ** (ArgumentError) unknown application: :zipbooks 

J'utilise les versions, donc je ne peux pas coder en dur le chemin priv parce que l'emplacement relatif de celui-ci va changer. J'ai utilisé Application.app_dir(:zipbooks, "priv") de manière fiable dans le passé, donc je me demande comment accomplir cela dans config.exs

Répondre

1

Je suppose que ce n'est pas possible. Donc ce que j'ai fini par faire était ceci:

def start(_type, _args) do 
    # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html 
    # for other strategies and supported options 
    opts = [strategy: :one_for_one, name: ZB.Supervisor] 

    Application.get_env(:zipbooks, :env) 
    |> children 
    |> Supervisor.start_link(opts) 
    |> after_start 
end 

defp after_start({:ok, _} = result) do 
    Geolix.load_database(%{ 
     id:  :city, 
    adapter: Geolix.Adapter.MMDB2, 
    source: Application.app_dir(:zipbooks, "priv") |> Path.join("data/GeoLite2-City.mmdb") 
    }) 
    result 
end 
defp after_start(result), do: result