【发布时间】:2017-05-03 03:24:03
【问题描述】:
我正在尝试在 Elixir 中创建一个小的 CLI 应用程序作为一个学习项目。该程序的某些部分将需要一些日期时间处理,因此我遇到了 Elixir 库 [Calendar][calendar]。
当我使用以下命令构建它时,它似乎确实包含了 [calendar] 的依赖项:
(mix clean &&)? mix escript.build
因为它向我抛出了这个错误:
Could not start application tzdata: exited in: Tzdata.App.start(:normal, [])
** (EXIT) an exception was raised:
** (MatchError) no match of right hand side value: {:error, {:shutdown, {:failed_to_start_child, Tzdata.EtsHolder, {%ArgumentError{message: "unknown application: :tzdata"}, [{Application, :app_dir, 1, [file: 'lib/application.ex', line: 428]}, {Application, :app_dir, 2, [file: 'lib/application.ex', line: 437]}, {Tzdata.EtsHolder, :release_dir, 0, [file: 'lib/tzdata/ets_holder.ex', line: 86]}, {Tzdata.EtsHolder, :make_sure_a_release_dir_exists, 0, [file: 'lib/tzdata/ets_holder.ex', line: 70]}, {Tzdata.EtsHolder, :make_sure_a_release_is_on_file, 0, [file: 'lib/tzdata/ets_holder.ex', line: 64]}, {Tzdata.EtsHolder, :init, 1, [file: 'lib/tzdata/ets_holder.ex', line: 10]}, {:gen_server, :init_it, 6, [file: 'gen_server.erl', line: 328]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 247]}]}}}}
(tzdata) lib/tzdata/tzdata_app.ex:15: Tzdata.App.start/2
(kernel) application_master.erl:273: :application_master.start_it_old/4
我的mix.exs如下:
defmodule Cascli.Mixfile do
use Mix.Project
def project do
[app: :cascli,
version: "0.1.0",
elixir: "~> 1.4",
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
escript: escript(),
deps: deps()]
end
def escript do
[ main_module: Cascli ]
end
def application do
[ extra_applications: [ :logger, :calendar, :tzdata ] ]
end
defp deps do
[
{ :poison,
"~> 3.0" },
{ :calendar,
"~> 0.16.1" },
{ :tzdata, # Tried with and without this dependency
"~> 0.5.12" } # with no luck.
]
end
end
我在 Google 上搜索并发现了一个 [issue][issue-5538] 已由 [this pull request][pull-5540] 解决,但它似乎并没有真正解决这个特殊情况。然而,它确实与不考虑依赖关系的依赖关系的 escript 构建有关。我只是不知道这是 Elixir 问题还是我的设置/依赖项的问题。即使我尝试在 deps 和 extra_applications 字段中使用或不使用 :tzdata 条目,错误也是相同的。
它仍然让我回避为什么它根本找不到 tzdata,不管我自己是否将它作为依赖项。
[calendar]:https://github.com/lau/calendar
[pull-5540]:https://github.com/elixir-lang/elixir/pull/5540
[issue-5538]:https://github.com/elixir-lang/elixir/issues/5538
【问题讨论】:
-
尝试将
tzdata的版本覆盖为0.1.8。请参阅github.com/bitwalker/timex/issues/86#issuecomment-147517762 了解更多信息。 -
@Dogbert 天哪,这太疯狂了。我希望我早一点发现。谢谢!如果您想通过解释来回答问题(由于依赖于从文件加载的 ETS 表,因此 0.1.x 以上的版本无法运行。显然,您在 escripts 中无法做到这一点?
标签: elixir