0

私は、Erlang Cowboy リリースを生成しようとしています。

https://github.com/extend/cowboy/blob/master/guide/getting_started.md

作成Makefileして実行するまではすべてうまくいきます$ make。コンパイル プロセスは次のように終了します。

...
make[1]: Leaving directory `/home/lloyd/hello_erlang/deps/cowboy'
ERLC   hello_erlang_app.erl hello_handler.erl hello_erlang_sup.erl
compile: warnings being treated as errors
src/hello_handler.erl:3: behaviour cowboy_http_handler undefined
make: *** [ebin/hello_erlang.app] Error 1

コードをトリプルチェックしましたが、見逃したものは何もありません。

それで、これは私のエラーですか?それとも、はじめにの説明やカウボーイ自体のバグですか? それが私の間違いである場合、どうすれば修正できますか?

にこの質問をしましessen@ninenines.euたが、今のところ回答がありません。

4

1 に答える 1

5

問題の原因は 2 つあります。

  1. モジュールには動作宣言があります-behaviour(cowboy_http_handler).。これは完全に正しいです。
  2. ファイルをコンパイルすると、コンパイラはcowboy_http_handler検索パスでモジュールを見つけることができません

これにより、動作宣言がコンパイラに出てそのモジュールを見つけ、動作が期待するコールバック関数を見つけるように指示するため、エラーが発生します。通常、コンパイラがビヘイビア モジュールを見つけられない場合、または見つからなかったがいくつかのコールバックが見つからない場合は、これに関する警告を発行して処理を続行します。ただし、Makefile はすべての警告をエラーとして扱うコンパイラ オプションを設定しているため、コンパイルは失敗します。

これには (少なくとも) 3 つの解決策があります。

  1. コンパイラ オプションを削除し、警告が表示されることを受け入れます。
  2. コンパイラが動作モジュールを見つけてチェックできることを確認してください。簡単な方法は-pa Dir、カウボーイ ビーム ファイル ディレクトリにオプションを追加して、ファイルを検索できるようにすることです。
  3. カウボーイ ディレクトリを自動的に検出するように Erlang をセットアップし$ERL_LIBSます。

コンパイラが適切なモジュールを見つけたとしても、システムを実行するときに Erlang がディレクトリを見つけられることを確認する必要があることに注意してください。コンパイル時環境と実行時環境の間に自動的な同等性はありません。

于 2013-09-20T18:22:04.503 に答える