LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Organization

環境変数を変更したときに変更後の値がElixirのアプリケーションに反映されない!? (mix clean するといいかもね、だよね)

企画の知恵に勝るコストダウンはない。

Advent Calendar 2022 38日目1の記事です。
I'm looking forward to 12/25,2022 :santa::santa_tone1::santa_tone2::santa_tone3::santa_tone4::santa_tone5:
私のAdvent Calendar 2022 一覧


この記事は冒頭に出したNervesアプリの例と後半のElixirアプリの例では事情が異なるので、中途半端な内容になってしまっています。 後日、内容を見直して更新します🙏🙏🙏🙏🙏

はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

WiFiルータを買い替えました。
Nervesに設定したSSIDとパスフレーズが書き換わらなくてアタフタしたので書きとめておきます。

NervesでWiFiを使うには

ここに設定例が書いてあります。

config/target.exs
config :vintage_net,
  regulatory_domain: "US",
  config: [
    {"usb0", %{type: VintageNetDirect}},
    {"eth0",
     %{
       type: VintageNetEthernet,
       ipv4: %{method: :dhcp}
     }},
    {"wlan0",
     %{
       type: VintageNetWiFi,
       vintage_net_wifi: %{
         networks: [
           %{
             key_mgmt: :wpa_psk,
             ssid: System.get_env("NERVES_WIFI_SSID"),
             psk: System.get_env("NERVES_WIFI_PASSPHRASE")
           }
         ]
       },
       ipv4: %{method: :dhcp}
     }}
  ]

こんな感じで設定をしています。
mix firmwareで以前ビルドしたことのあるNervesプロジェクトです。

新しいWiFiルータの値に書き換えよう:rocket::rocket::rocket:

.zshenvに環境変数NERVES_WIFI_SSIDNERVES_WIFI_PASSPHRASEを設定しています。
新しく買ったWiFiルータの値に設定しなおして、ターミナルを再起動して、source ~/.zshenvとやって、echo $NERVES_WIFI_SSIDで、「うん、正しいね」と確認して、念には念をでecho $NERVES_WIFI_PASSPHRASEで正しいことも確認してあと

$ mix firmware
$ mix burn

と、バーンでmicroSDカードに焼きましたよ。
これで一丁上がり!!!
$\huge{とはなりません。}$
:sob::sob::sob::sob::sob::sob::sob:

結論から言うと、前回mix firmwareしたときに参照した古いWiFiルータの値がそのまま使われます。
これ、私は以前からよくありがちで、そのたびにいつも悩んでいました。
忘れるのは記事にしないから記憶に定着しないのです。

解決策? 回避策?

すごくダサいやり方です。
config/target.exsをコンパイルエラーを起こすようにします。
具体的には、環境変数を参照している箇所の2箇所の閉じカッコを消すことをしました。
そしてコンパイルエラーをわざと起こして、ご丁寧に一個づつ修正をしました。

果たして
$\huge{新しいWiFiルータにつながるようになりました。}$
:tada::tada::tada:

一応、これで解決しました。

mix clean && mix compileでどうでしょう

上記でめでたしめでたしでもいいのですが、
$\huge{ダサいので}$
どげんかしたいとおもいます。

ここからはふつうのElixirでやってみます。

$ mix new hoge
lib/hoge.ex
defmodule Hoge do
  @value System.get_env("AWESOME_VALUE")

  def value, do: @value
end

というソースコードを用意しておいて、おもむろに

$ export AWESOME_VALUE="awesome"
$ iex -S mix
iex> Hoge.value
"awesome"

です。
Ctl+Cを2回でもおして一度止めて、今度は値をhiroshiに変えてやってみます。

$ export AWESOME_VALUE="hiroshi"
$ iex -S mix

果たして、

iex> Hoge.value
"awesome"

です。
hiroshiに変わっていません。

そこで

$ mix clean
$ mix compile
$ iex -S mix

とやりますと、

iex> Hoge.value

$\huge{"hiroshi"}$
です。

めだたく、hiroshiに変わりました。
:tada::tada::tada:


Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Enjoy Elixir:bangbang::bangbang::bangbang:
$\huge{Enjoy\ Elixir🚀}$

今回は、環境変数の値を変えたつもりだけどElixirのアプリケーションには反映されないなあ〜 ということを私はやりがちでして、その都度、アレレ? となっていますので記事に残しておくことにしました。
該当箇所でコンパイルエラーを起こすか、mix clean && mix compileすればよいでしょう。

以上です。


付録

以下、付録です。

Elixirの誕生日は、2012年5月24日です。
そのため、今年の2022年5月24日は10周年を迎えます。

iex> Date.diff(~D[2022-05-24], ~D[2022-02-07])
106

そうそう!
2月24日発売予定のWEB+DB PRESSで、ElixirPhoenixの特集がでますよ〜

ElixirPhoenixをはじめられたばかりの方も、腕におぼえがある方も、どんなものなのかなあと様子見をきめこんでいる方も、
つまりは
$\huge{全人類のみなみなさま!!!}$
お手にとって、お楽しみください!!!


Elixir

最後の最後に、Elixirについて紹介します。

  • |>でスイスイ、プログラミングしていくことができる素敵なプログラミング言語です
  • さっそくプログラムの例を示します
  • Qiita APIを使わせていただいて、Elixirタグがついた最新の記事を20件取得しています
  • ここでは雰囲気をつかんでいただければ大丈夫です
Mix.install [{:req, "~> 0.2.1"}]

"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!(finch_options: [pool_timeout: 50000, receive_timeout: 50000])
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))

Webアプリケーションを楽しむなら

IoTを楽しむなら

AIを楽しむなら

もっとElixirのことを知りたい方へオススメの書籍 :books:

コミュニティ

  • elixir.jp Slack workspaceに参加してみてください
    • マヂ、やさしい人ばっかりのコミュニティ
    • あなたの困ったをきっと解決してくれるでしょう
  • NervesJP Slack workspaceでは、NervesやIoTが好きな愉快なfolksたちがあなたの訪れを歓迎します :tada:
  • たくさんのコミュニティがあります FCOvBkAUYAE6mL8.jpeg (EDI/fukuoka.ex/kokura.exLiveView JP@piacerex さん作 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:)

Elixirコミュニティに初めて接する方は下記がオススメです

Elixirコミュニティ の歩き方 -国内オンライン編-

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
image.png
(piyopiyo.exエリジョ の nakoさん(@kn339264) 作、素敵な資料:clap::clap_tone1::clap_tone2::clap_tone3::clap_tone4::clap_tone5:)

Elixirのイベント情報

@koga1020 さんが作成されたイベントカレンダーがあります。
https://elixir-jp-calendar.fly.dev/

気になるイベントにはぜひ参加してみましょう!!!

上記サイトの解説記事はこちらです。


I organize autoracex.
And I take part in NervesJP, fukuoka.ex, EDI, tokyo.ex, Pelemay.
I hope someday you'll join us.

We Are The Alchemists, my friends!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1