2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gumi.inc TS&DAdvent Calendar 2017

Day 14

rebar3 uncaught errorについて

Last updated at Posted at 2017-12-14

問題

rebar3でコマンドを実行する時に

===> Uncaught error in rebar_core. Run with DEBUG=1 to see stacktrace or consult rebar3.crashdump

が出ました。 解決してみました。

細かいバックグラウンド

  1. Macを使ってます
  2. チームメンバーのgitレポをクローンしてrebar3を使ってました、特に問題なかった(xref, dialyzerなど)
  3. ./rebar3 pkgsでパッケージングしてみたところ、バグった
  4. エラーを見て環境変数関連のエラーメッセージがあったerror:/User/先輩/のファイル/が欲しい
  5. 推測:rebar3をビルドする環境(依存するファイルなど)が変わったので、怒られたのでは
  6. 対策:自分でビルドしてpkgさせます
  7. 現在ここ:オフィシャルのgitレポから最新のレポ3.4.7をクローンして、ビルドして、./rebar3 cleanを実行しようとするところ、上記なエラーが出ました

TL;DR

  • ローカルでビルドしたrebar3のバージョンが3.4.7+build.3966.refbXXXXXXXです
  • オフィシャルサイトのバイナリーのバージョンが3.4.7です
  • 依存するappの中にバージョンがX.X.Xという文字なしのvsnを想定するappがあります
  • オフィシャルサイトのバイナリーを使えばエラーを解消できます

詳しいデバッグ手順

まず

DEBUG=1 ./rebar3 clean

でスタックトレースを拝見します

===> Evaluating config script "/WORKINGDIR/_build/default/lib/hackney/rebar.config.script"
===> Uncaught error in rebar_core. Run with DEBUG=1 to see stacktrace or consult rebar3.crashdump
===> Uncaught error: {badmatch,
                             {error,
                              {40,file,
                               {error,
                                {badmatch,
                                 ["3","4","7+build","3966","refbXXXXXXX"]},
                                [{erl_eval,expr,3,[]}]}}}}

全く原因がわからないのでグーグル先生に聞いたところ、このイシューを見つけました。中に依存するappのrebar.config.scriptに問題がありと説明し、ワークアラウンドも載っています。
今回エラーが出たのはhackneyのrebar.config.scriptです。

IsRebar3 = case application:get_key(rebar, vsn) of
               {ok, VSN} ->
                   [VSN1 | _] = string:tokens(VSN, "-"),
                   [Maj, Min, Patch] = string:tokens(VSN1, "."),
                   (list_to_integer(Maj) >= 3);
               undefined ->
                   false
           end
...

ここでstring:tokens/2三つのtermをMaj、Min、Patchを通して取り出そうとしています。
しかしローカルでビルドしたrebar3のバージョンが、、、、
まずrebar3のバージョンを確認しましょう

./rebar3 report
Rebar3 report
 version 3.4.7+build.3966.refbXXXXXXX
 generated at 2017-12-14T04:35:25+00:00
...

このvsnにstring:tokensを適用すると["3","4","7+build","3966","refb7c021b3"]五つのtermを含むリストが帰ってきます。なのでbadmatchになります。
イシューではrebar.config.scriptを修正することでワークアラウンドするようと提案しましたが、一々問題のあるscriptを修正するのがキリがないなあと感じ、大人しくオフィシャルサイトのバイナリーを使うことにしました。

オフィシャルサイトのバイナリーで./rebar3 reportを実行してみると

./rebar3 report
Rebar3 report
 version 3.4.7
 generated at 2017-12-14T03:07:34+00:00

バッチリです、rebar3のコマンドも無事実行できました。/rebar3 pkgも実行できるようになりました。

2
0
0

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
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?