在config.exs中使用Application.app_dir(:my_app,“priv”)

时间:2017-10-20 18:14:48

标签: elixir

我正在尝试将库配置设置为指向priv中的文件路径(geoip db):'

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

但我的

config :zipbooks, …

位于顶部的同一文件中。我收到这个错误:

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

我使用版本,因此我无法对priv路径进行硬编码,因为它的相对位置会发生变化。我过去曾经可靠地使用过Application.app_dir(:zipbooks, "priv")所以我很想知道如何在config.exs中实现这个目标

2 个答案:

答案 0 :(得分:3)

我猜这是不可能的。所以我最终做的是:

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

答案 1 :(得分:0)

我最终在config.ex中使用以下命令。到目前为止,在我看来,对我来说还算不错。

config :zippy, :assets_folder, Path.join(Path.dirname(__DIR__), "priv/assets")

在以下位置找到了此解决方案:https://groups.google.com/forum/#!topic/phoenix-talk/teaQI8fzHuQ