LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

Organization

ローカルで動いているのにCIではmix dialyzerが通らない -> それ、dialyxirの追加の仕方に問題あるのだとおもうよ

できない理由はできることの証拠だ。できない理由を解決すればよい。

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


はじめに

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

$\huge{私が悪い}$
のです。
さきに謝っておきます

先日参加した「tokyo.ex #15 ハンズオン回」で、私は苦戦したことがありました。

それは、ローカルで動いているmix dialyzerが、CircleCIで動かそうとすると、動かないのです。

もう一度いいます。
$\huge{悪いのは私め}$
でございます。
申し訳ありません。
なにが原因だったのかを記録しておきます。
そして私の記憶に定着させます。

tokyo.ex #15 ハンズオン回」のレポートは以下に書いております。
資料がとても充実しています!

失敗例

スクリーンショット 2022-02-04 4.31.04.png

Mixタスクがみつからないですと〜〜〜 :sob::sob::sob:

関連するファイル

https://github.com/jeremyjh/dialyxir/blob/a1438f7810d7506485747194e6ac9ea358793e09/README.md の記載をそのままコピペしました

mix.exs
  defp deps do
    [
      {:dialyxir, "~> 1.0", only: [:dev], runtime: false}
    ]
  end
.circleci/config.yml
version: 2

jobs:
  build:
    docker:
      - image: circleci/elixir:1.13-node
        environment:
          MIX_ENV: test
          MIX_TEST_DB_HOST: localhost

      - image: circleci/postgres:9.6
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: demo_test
          POSTGRES_PASSWORD: postgres

    working_directory: ~/app

    steps:
      - checkout
      - run: mix local.hex --force
      - run: mix local.rebar --force
      - run: mix archive.install --force hex phx_new
      - run: mix do deps.get, compile
      - run: mix test
      - run: mix dialyzer

これだと、** (Mix) The task "dialyzer" could not be foundなわけです。

正解例 :tada::tada::tada:

:testを追加しています。

mix.exs
  defp deps do
    [
      {:dialyxir, "~> 1.0", only: [:dev, :test], runtime: false}
    ]
  end

だって、MIX_ENV: testなのですから。
.circleci/config.ymlは、さきほどと変わっていません。

.circleci/config.yml
version: 2

jobs:
  build:
    docker:
      - image: circleci/elixir:1.13-node
        environment:
          MIX_ENV: test
          MIX_TEST_DB_HOST: localhost

      - image: circleci/postgres:9.6
        environment:
          POSTGRES_USER: postgres
          POSTGRES_DB: demo_test
          POSTGRES_PASSWORD: postgres

    working_directory: ~/app

    steps:
      - checkout
      - run: mix local.hex --force
      - run: mix local.rebar --force
      - run: mix archive.install --force hex phx_new
      - run: mix do deps.get, compile
      - run: mix test
      - run: mix dialyzer

そうすると、test/配下も対象になっちゃうからまあ外しておいてもいいかな。
ignoreかな〜

.dialyzer_ignore.exs
[
  ~r/test\/.+\.ex/,
]

tokyo.ex #15 ハンズオン回」での成果

成果物は

です。


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

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

ローカルで動いたはずなのにCIでmix dialyzerなどのMixタスクが通らない場合には、以下を確認してみてください。

  • CIでのMIX_ENVは何にして動かしていますでしょうか
  • mix.exsのHexの追加の仕方をみなおすか、CIの設定ファイルの方を変えるかしてみましょう

以上です。


付録

以下、付録です。

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

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

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


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:)


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