官术网_书友最值得收藏!

Managing application configuration

Mix tasks run in a specific environment. The predefined environments are production, development, and test (prod, dev, and test). The default environment is dev. In this recipe, we will configure an application with different values for each environment. Invoking the same function will result in a different output based on the configuration.

How to do it…

To manage an application configuration, we follow these steps:

  1. Create a new application:
    > mix new config_example
    
  2. Go to the generated application directory and open config/config.exs.
  3. Replace all of the file's content with the following code:
    use Mix.Config
    
    config :config_example,
      message_one: "This is a shared message!"
    
    import_config "#{Mix.env}.exs"
  4. Create three more files under the config directory with the following code:
    • In config/dev.exs, add the following:
      use Mix.Config
      
      config :config_example,
        message_two: "I'm a development environment message!"
    • In config/prod.exs, add this code:
      use Mix.Config
      
      config :config_example,
        message_two: "I'm a production environment message!"
    • In config/test.exs, add the following:
      use Mix.Config
      
      config :config_example,
        message_two: "I'm a test environment message!"
  5. Define two module attributes in lib/config_example.ex to hold the values of message_one and message_two, as follows:
    @message_one Application.get_env(:config_example, :message_one)
    @message_two Application.get_env(:config_example, :message_two)
  6. Create a show_messages function in lib/config_example.ex, like this:
    def show_messages do
      IO.puts "Message one is: #{@message_one}"
      IO.puts "Message two is: #{@message_two}"
    end
  7. Start the application in the three different environments and see the output of the show_messages function:
    • For the development environment, start the application as follows:
      > MIX_ENV=dev iex –S mix
      iex(1)> ConfigExample.show_messages
      Message one is: This is a shared message!
      Message two is: I'm a development environment message!
      :ok
      iex(2)>
      
    • For the production environment, start the application like this:
      > MIX_ENV=prod iex –S mix
      iex(1)> ConfigExample.show_messages
      Message one is: This is a shared message!
      Message two is: I'm a production environment message!
      :ok
      iex(2)>
      
    • For the test environment, start the application as follows:
      > MIX_ENV=test iex –S mix
      iex(1)> ConfigExample.show_messages
      Message one is: This is a shared message!
      Message two is: I'm a test environment message!
      :ok
      iex(2)>
      

How it works…

When we include the last line in config.exs (import_config "#{Mix.env}.exs"), the Mix configuration is loaded from the files, in this case with the Mix environment as its name and .exs as its extension.

The configuration from the imported files will override any existing configuration (with the same key) in the config.exs file. In fact, Configuration values are merged recursively. See the example at https://github.com/alco/mix-config-example.

To access configuration values, we use Application.get_env(:app, :key).

主站蜘蛛池模板: 乌拉特前旗| 枣阳市| 扶沟县| 巴里| 遵义市| 喀什市| 隆尧县| 清苑县| 彩票| 宁夏| 方城县| 临沧市| 黄大仙区| 南郑县| 中西区| 西安市| 井研县| 巴青县| 樟树市| 靖宇县| 石河子市| 武山县| 方城县| 历史| 郴州市| 手游| 无棣县| 米脂县| 扬中市| 格尔木市| 枣庄市| 疏勒县| 沐川县| 拉萨市| 辽阳市| 桐柏县| 洛宁县| 阳山县| 淳化县| 靖边县| 麻江县|