elixir - import_config "#{Mix.env}.exs" 上的 Code.LoadError
问题描述
我把导入这个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
这是一个错误还是我需要做一些不同的事情?
解决方案
import_config/1
工作原理
从给定文件导入配置。
[...]
如果 path_or_wildcard 不是通配符而是单个文件的路径,则导入该文件;如果文件不存在,则会引发错误。
如果path/wildcard是相对路径/wildcard,则相对于当前配置文件所在目录展开。
Mix.env/0
工作原理
返回混合环境。
当您的应用程序启动时,它将从环境变量中读取值,如果未MIX_ENV
设置:dev
环境变量,则进行设置。比较执行。
调用时运行的任务通过属性mix test
告诉 Mix默认为:test
环境。@preferred_cli_env
结合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
prod
您可以通过在调用之前检查环境来绕过为所有环境创建配置文件import_config
:
unless Mix.env() == :prod do
import_config("#{Mix.env()}.exs")
end
推荐阅读
- java - 当你点击它时,用消失的文本制作一个 JTextField
- android - RecyclerView 显示为灰色框,其名称位于中心。对于已实现的音频可视化器视图也是如此
- html - 为什么带有 (@media print display: none; ) 的 html 元素在打印时显示为空白以及如何删除空白?
- java - Android 不考虑 URL 中的完整 GET 参数
- jupyter-notebook - 使用 Latex 将 Juypter Notebook 导出到 Markdown 时遇到问题
- ios - iOS Simulator 如何自动化用户操作然后继续调试
- electron - 从主进程与菜单栏窗口的通信不起作用
- ansible - 任务仅在所需的目录文件夹不可用时运行,否则它将跳过该任务
- python - 打印列表中实例的属性,仅当它存在时
- asp.net-core - ASP.NET Core 服务器中如何包含 Swagger XML 注释文件?