問題タブ [erlang-escript]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
erlang - SSL ディストリビューションで Erlang Escript ファイルを実行する
ノードに接続してrpc呼び出しなどを行う小さなescriptファイルがあります...
短い名前でも長い名前でも問題なく動作しますが、分散 Erlang では標準の http 通信に依存しています。
使用したいのですが、配布用に https/SSL を使用しています。
SSL を使用して「通常の」Erlang システムを起動するには、さまざまなフラグを渡して、Erlang にそのように実行するように指示する必要があります。
inet_tcp_dist
これにより、デフォルトの配布メカニズム ( ) が ssl の配布メカニズム ( ) に置き換えられますinet_ssl_dist
。
escriptは、erlang ファイルをシェル スクリプト ファイルとして実行します。
私の質問は次のとおりです。
- デフォルトの代わりに安全な配布メカニズムを使用するために escript が実行される Erlang の「環境」を取得することは可能ですか?
- もしそうなら、どうすればいいですか?
cron - esrcript cron ブルース
コマンドラインから正常に実行されるescriptファイルがあります。
これはcronに適したものであり、すべてのパスは明示的ですが、実行するとコンパイルに失敗し、bad attributes
.
問題の悪い属性はマクロ定義です:
答え
Geoff Ready の提案のおかげで、コマンド ラインと cron のバージョンが異なるバージョンを取得していることは確かでしたinit:script_id()
。{"OPT APN 181 O1", "R13B"}
スクリプトには次の最初の行がありました。
オペレーティングシステムは私のためにErlangを「見つけて」いました。cron のさまざまな環境変数は、別の erlang が選択されたことを意味します (Geoff の最初の回答であり、私はちょっと知っていましたが、それがどのように影響するかはわかりませんでした)。
解決策は、次の開始行でバージョンを強制することです。
あとがき
Erlang の以前のバージョンの別の Ubuntuapt-get
インストール (ソース インストールとは別の場所) と、誤った 64 ビット インストールもありました...
cron環境は、古くて目立たないインストールにフォールバックし続け、その間ずっと失敗していました:(
erlang - Erlang escript 引数
コマンドライン引数が escript でどのように機能するかよくわかりません。マンページから、引数が文字列のリストとして main/1 に渡されることがわかりました。main に渡された引数を解析するにはどうすればよいですか?
次の点を考慮してください。
簡単なテストで、1 つの引数だけですべてがうまくいくように見えます。
複数の引数を渡すとどうなりますか?
それは私が望んでいたことではありません。スペース文字で文字列を分割してみました:
収量の長さ: 1
erlang - erlang escriptを使用したejabberd extauth
私は自分のプロジェクトの 1 つで ejabberd を使用していますが、それ自体は erlang で実装されています。認証フローにアクセスして、ユーザー データベースを ejabberd に個別に登録しなくても統合できるようにしたいと考えています。
ここで説明されているように、ほとんどのことを正しく行っています: https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8
しかし、どうやら ejabberd は私の escript から応答を受け取っていないようです。以下は、resopnse の送信を担当するコードの一部です。
私のログから、私は送信することになります:
これは、PHP 内で行っていたこととまったく同じです。
私はどこがめちゃくちゃなのかわからない。
また、私のアプリ自体が erlang であり、extauth 内の stdin/stdout の読み取り/書き込みの代わりに erlang メッセージ パッシングを利用したいので、ユーザー データベースを統合するためのより良い方法があるかどうかに興味があります。
erlang - Escript:スクリプトディレクトリを基準にしたコードパスの設定
このように-pzを使用してescriptに相対コードパスを設定しようとすると
パスは、escriptを実行したディレクトリを基準にして解釈されるため、スクリプトの場所を基準にしたパスを設定するのに役立ちません。
私の現在の「回避策」は、これがすべてリポジトリの一部であり、場所に依存することを望まないため、煩わしい絶対パスを使用しています。
では、escriptが配置されているディレクトリを基準にしてコードパスを設定するにはどうすればよいですか?
erlang - Erlang OTP アプリケーションを起動し、コマンドライン引数をアプリケーションのルート スーパーバイザに渡すにはどうすればよいですか?
クイック 1 ライナー: OTP アプリケーションを起動し、コマンドライン引数を渡すにはどうすればよいですか?
一般的な「UNIX」の方法で OTP アプリケーションを起動し、getopts によって解析されたコマンドライン引数を渡すことができるようにしたいと考えていました。そのため、 getoptライブラリを使用してコマンドライン引数の解析を処理する erlang escript があります。
シノの答えは私を正しい道に導きました:
- 私は自分のescriptにgetoptsの解析をさせています
- 次に、escript は application:load/1 を使用してアプリケーションの説明をメモリにロードします。
- 次に application:set_env/3 を使用して CLI 引数を保存します
- 次に、application:start/2 でアプリケーションを起動します
- アプリケーションが起動すると、application:get_env/2 を介して引数にアクセスできます。
erlang - escript を実行できないのはなぜですか?
rebar は現在のディレクトリにあります。
FreeBSD 9.0 を使用しています。
ありがとう!
erlang - 生成された Erlang プロセスに何も送信できません
次のErlangコードがあります:
私はこれを実行します:
excript rmq.erl
このコードは機能しません。スポーンがうまくいかないようです。
メインから実行すると、コードの残りの部分が機能し、関数 send と validate が正しく機能します (コメントしました)。私が間違っていることは何ですか?
すみません、ばかげた質問かもしれませんが、私はerlangの初心者です。インターネットや本で検索回答を試してみましたが、失敗しました...
erlang - Erlang beam_lib チャンクは壊れていますか?
.beam ファイル (エリクサー コードからコンパイル) を逆コンパイルしようとしました
このエスクリプトを使用しました
ファイルを生成したもの。しかし、このコードを再度コンパイルすると、「-spec」注釈でエラーが発生します
コードは変更されていません。Erlang の新しいバージョンに関連しているのでしょうか、それとも何か間違っているのでしょうか?