我将其导入到config.exs
文件中:
use Mix.Config
import_config "#{Mix.env}.exs"
或
import_config "#{Mix.env()}.exs"
当我尝试运行mix test
时,它在抱怨:
mix test
** (Code.LoadError) could not load /Users/romenigld/workspace/elixir/ebooks/issues/config/test.exs
(elixir) lib/code.ex:1147: Code.find_file/2
(elixir) lib/code.ex:706: Code.eval_file/2
(mix) lib/mix/config.ex:187: anonymous fn/2 in Mix.Config.__import__!/2
(elixir) lib/enum.ex:1925: Enum."-reduce/3-lists^foldl/2-0-"/3
(mix) lib/mix/config.ex:186: Mix.Config.__import__!/2
(stdlib) erl_eval.erl:680: :erl_eval.do_apply/6
(elixir) lib/code.ex:232: Code.eval_string/3
这是一个错误,还是我需要做些不同的事情?
答案 0 :(得分:1)
import_config/1
的工作方式从一个或多个给定文件导入配置。
[...]
如果path_or_wildcard不是通配符,而是单个文件的路径,则该文件将被导入;如果文件不存在,则会引发错误。
如果路径/通配符是相对路径/通配符,它将相对于当前配置文件所在的目录进行扩展。
Mix.env/0
的工作方式来自Mix#env/0:
返回Mix环境。
应用程序启动时,它将从环境变量MIX_ENV
中读取值,或者如果未设置环境变量,则将其设置为:dev
。 Combare implementation。
通过tells Mix调用mix test
@preferred_cli_env
attribute以默认为:test
环境时运行的任务。
import_config/1
和Mix.env/1
具有与
等效的代码行import_config "#{Mix.env()}.exs"
将在编译时(首次运行mix test
时)评估为
import_config "test.exs"
由于路径是相对,它将在包含对test.exs
的调用的文件所在的目录中查找文件import_config
。
如果是/Users/romenigld/workspace/elixir/ebooks/issues/config/
,则必须在/Users/romenigld/workspace/elixir/ebooks/issues/config/test.exs
中创建一个有效的配置文件,并且对于所有其他环境,您的应用程序都应在其中运行(可能是dev
和{{1 }}。
您可以在调用prod
之前通过检查环境来为所有环境创建配置文件:
import_config