2017-05-10 13 views
0

コマンドラインからアプリケーションを起動しようとしています。アプリケーションは基本的にOTP準拠のTCPサーバーであり、シェルから起動するとうまく動作します。しかし、コマンドラインから起動すると実際には起動しません。コマンドラインからerlangアプリケーションを起動する際の問題

すべてのファイルは、対応するフォルダ構造にあります。つまり、ソースは\ srcとバイナリ\ ebinにあります。私は

code:add_patha("./ebin"). 

と.erlangファイルのパスを設定しており、呼び出される関数はまた、私は(重複)を加えた

-module(wotsuke_geolocation_lookup_server). 
-behaviour(application). 

-export([start/0, start/2, stop/1]). 

start() -> 
    event_dbs:start(), 
    wotsuke_server_sup:start_link(). 

start(_Type, _Args) -> 
    event_dbs:start(), 
    wotsuke_server_sup:start_link(). 

stop(_State) -> 
    ok. 

このモジュールでスタート/ 0(iは使用されargsを必要とする将来の機能のためにstart/2)。私が実行したとき は今:

erl -run wotsuke_geolocation_lookup_server start [] [] 

私はそれがモジュール/機能を見つけることができない意味

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] 

{"init terminating in do_boot",{undef,[{wotsuke_geolocation_lookup_server,start,[["[]","[]"]],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}} 

Crash dump is being written to: erl_crash.dump...done 
init terminating in do_boot() 

を取得します。

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] 

Eshell V7.0 (abort with ^G) 
1> 

基本的には何も開始されていない(プロセスIDが返されない):したがって、私は冗長スタート/ 0

erl -run wotsuke_geolocation_lookup_server start 

を使用して取得します。私はサーバーに接続しようとし、サーバーがオフのときに典型的な回答を得ました。私はまた、-paオプションでebinフォルダに強制的にerlを試みました。同上。

私がコマンドラインからerlangアプリケーションを実行しようとしているのは初めてです(それをデモ化するために)、私は無知なままです。

ありがとうございました。

が追加さ:わからない、それは私は同様のerlangアプリのコードを追加し、助け

{application, wotsuke_geolocation_lookup_server, 
    [{description, "Wotsuke Geolocation lookup server"}, 
    {vsn, "0.1.0"}, 
    {modules, [tcpserver_otp_backend, ets_methods, data_packing, data_formats, event_timings, logger, event_dbs, 
        obsolete_data_clean_ad, obsolete_data_clean, wotsuke_data_input, wotsuke_logger, wotsuke_server_sup, data_retrieve, wotsuke_data_output, user_event_dbs, 
        event_areas]}, 
    {registered, [wotsuke_data_input, wotsuke_server_sup, wotsuke_logger, wotsuke_data_output]}, 
    {applications, [kernel, stdlib, mnesia]}, 
    {env, []}, 
    {mod, {bsc, []}}]}. 

UPDATE:一つの問題が解決されます。コマンド

erl -run wotsuke_geolocation_lookup_server start [] [] 

の問題は、ERLがいずれかのスタート/ 0が唯一のモジュールは、指定または関数も指定されている場合アリティ1されている期待しているという事実トン実際に起因しています。 [] []を[[]、[]]と見なす。

+0

を実行しています{init "、" start_em "、" start "、" start "、" start "、" start "、" start "、" start "、" start " ] []]}} 'は、1つの引数であることを意味します。 – ernstroux

答えて

0

はいhttp://erlang.org/doc/man/init.htmlに応じて実行を実行する目的球は、あなたが/ 2を起動して、erl -run wotsuke_geolocation_lookup_server init [] []

+0

実際には、アリティは1でなければなりません。しかし、私はまだ、エラーが解決されたときにサーバが実際に起動するのではなく、シェルが起動するという問題があります。私は本当にそれを理解していない。 – Francesco

1

明らかに私の問題は、スーパーバイザができないことに起因しているを使用して実行呼び出すinit([Application, Type])を定義することができアリティ1である必要がありますコマンドラインから標準機能として起動しますが、application:startを使用します。したがって、私はそれがERL -run wotsuke_geolocation_lookup_server [] [] `初期化終了」{`として1つの引数としてセットアップを開始 `選んでいるように見えるなどのアプリケーションを使用して、私の問題を解決し、コマンドラインで

erl (options) eval "application:start(...)" 
関連する問題