След този „много интересен разговор“, основният екип на elixir реши да премахне генерирането на конфигурационната папка при създаване на нов проект с помощта на mix new. Накратко, ето защо, според Хосе Валим:

mix new се използва предимно за библиотеки и библиотеките трябва активно да се обезкуражават да дефинират (защото е глобален) или да използват записи (тъй като се отнася само за библиотеката) в config

Ако сте попаднали на тази публикация с цел кодиране на библиотека, трябва да прочетете внимателно указанията за библиотека. Ако работите върху нещо друго, като личен проект, следното може да е полезно :).

Правейки го по правилния начин

Започнете със създаване на папка config на основното ниво на вашия проект. В тази папка създайте файл config.exs.

Ако вече сте създали смесени проекти преди април 2019 г., това, което току-що направихте, може да ви се стори познато. mix new използвайте, за да генерирате този config/config.exs файл за нас. Досега нищо не се е променило.

В този момент може да се изкушите да използвате модула Mix.Config, за да попълните вашия конфигурационен файл, както се случва в по-старите ви проекти. Въпреки това Mix.Config вече е отхвърлен и отсега нататък трябва да използвате модула Config. Модулът Config се използва като заместител на Mix.Config от elixir v1.9. и не е специфичен за микса.

Вече можете да пишете във вашия config.exs файл:

import Config config :some_app, 
  key1: “value1”, 
  key2: “value2” 
import_config “#{Mix.env()}.exs”

Заменете some_app с името на вашето приложение и напишете всяка двойка ключ/стойност на вашите конфигурационни променливи отдолу.

Сега забележете, че import_config “#{Mix.env()}.exs” не е задължително: имате нужда от този ред само ако създавате няколко конфигурационни файла, за да използвате различни конфигурации в зависимост от вашата среда: config/dev.exs, config/test.exs … Създаването на тези файлове следва същия модел, както е обяснено по-горе за файла config/config.exs.

Вашата конфигурационна променлива е зададена! Вече можете да ги извлечете навсякъде във вашия код, като използвате Application.fetch_env!/2`:

“value1” = Application.fetch_env!(:some_app, :key1)

Например, в момента работя върху малък проект, в който използвам страхотния API на Pexels, за да намеря хубави пейзажни изображения. Ето как изглежда myconfig/config.exs:

import Config
config :landscape,
  pexels_api_key: “1234567890AZERTYUIOP”,
  pexels_url: “https://api.pexels.com"

След това ги извличам като модулни атрибути като това в lib/landscape/pexels.exs:

defmodule Landscape.Pexels do
  @pexels_url Application.fetch_env!(:landscape, :pexels_url)
  @pexels_api_key Application.fetch_env!(:landscape, :pexels_api_key)
# bunch of functions here... 
end

Няколко думи за миграцията

Отново, ако сте използвали конфигурационни файлове, за да конфигурирате библиотеката си в миналото, горещо ви препоръчвам да разгледате тук и да актуализирате библиотеката си. Ако все още трябва да използвате конфигурационни файлове, можете да намерите стъпките, необходими за мигриране на вашия проект от Mix.Config към модула Config тук.

Това е ! Надяваме се, че това ще ви помогне в пътуването ви с еликсир :)