import_config“#{Mix.env} .exs”上的Code.LoadError”

时间:2019-01-14 15:37:16

标签: elixir mix

我将其导入到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

这是一个错误,还是我需要做些不同的事情?

1 个答案:

答案 0 :(得分:1)

import_config/1的工作方式

来自Mix.Config#import_config/1

  

从一个或多个给定文件导入配置。

     

[...]

     

如果path_or_wildcard不是通配符,而是单个文件的路径,则该文件将被导入;如果文件不存在,则会引发错误。

     

如果路径/通配符是相对路径/通配符,它​​将相对于当前配置文件所在的目录进行扩展。

Mix.env/0的工作方式

来自Mix#env/0

  

返回Mix环境。

应用程序启动时,它将从环境变量MIX_ENV中读取值,或者如果未设置环境变量,则将其设置为:devCombare implementation

通过tells Mix调用mix test @preferred_cli_env attribute以默认为:test环境时运行的任务。

结合import_config/1Mix.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