Code.LoadError для import_config "# {Mix.env} .exs" - PullRequest
0 голосов
/ 14 января 2019

Я поместил импорт в файл 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 голосов
/ 15 января 2019

Как import_config/1 работает

С Mix.Config # import_config / 1 :

Импортирует конфигурацию из заданного файла или файлов.

[...]

Если path_or_wildcard не подстановочный знак, а путь к отдельному файлу, тогда этот файл импортируется; если файл не существует, возникает ошибка.

Если путь / подстановочный знак является относительно путь / подстановочный знак, он будет расширен относительно каталога, в котором находится текущий файл конфигурации.

Как Mix.env/0 работает

С Mix # env / 0 :

Возвращает среду Mix.

Когда ваше приложение запускается, оно будет считывать значение из переменной среды 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...