След този „много интересен разговор“, основният екип на 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 тук.
Това е ! Надяваме се, че това ще ви помогне в пътуването ви с еликсир :)