問題タブ [nitrogen]

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.

0 投票する
1 に答える
432 参照

erlang - 窒素セッション

すべての窒素ページで、次のセマンティックを使用します。

ユーザーがログインし、フォームを含むページでセッションがタイムアウトした場合でも、フォームの投稿を行うことができ、ログに記録されていないユーザーをログイン ページにリダイレクトする必要があるため、Web サイトのロジックに問題が発生する可能性があります。できる方法はありますかすべてのページのイベント機能を実行してこのケースを探すことなく、この動作を実現できますか?

よろしくお願いします

0 投票する
2 に答える
408 参照

erlang - 開始窒素 (erlang)

窒素 2.1 を開始するのに助けが必要です

このドキュメント (http://Nitrogenproject.com/doc/index.html) では、./deps/get_mochiweb.sh を実行するように指示されていますが、deps フォルダーにはそのようなスクリプトは含まれていません。

ls ../../deps

窒素_コア nprocreg simple_bridge 同期

一方、これらのスライドは次のとおりです。

./bin/窒素コンソール

http://localhost:8000を開く

私の方が理にかなっているように見えますが、よくわかりません。「./bin/Nitrogen console」は erlang コンソールを開きますが、私が知る限り、「open http://localhost:8000」は erlang 構文ではありません。実行しても何も起こりません。終了後、ポート 8000 には何も表示されません

ここからどうすればいいのかわからない

0 投票する
2 に答える
2171 参照

erlang - Erlang でメール (POP3、IMAP、SMTP など) を操作していますか?

Erlang/OTP でメール関連の通信を実用的に処理するにはどうすればよいですか? bash、python、または Perl スクリプトを使用して、電子メールを送信することができます。しかし、Erlang では、他のアプリケーションに代わって電子メールを送信および/または受信する専用のアプリケーションまたは組み込み関数をまだ見つけていません。 yaws
では、Web サーバーのアプリケーション パスにメール アプリケーションがあります。ただし、yaws のホームページには、このアプリケーション専用のドキュメントはありません。Nitrogen Web フレームワークでは、電子メール プロトコルに関する限り、まだ有用なものは何も見つかりませんでした。
実用的にメールを送受信するために使用できるライブラリを誰かが知っている場合は、私に指示してください。また、私が知らない非公式の実装もある可能性があります。前もって感謝します

0 投票する
3 に答える
829 参照

erlang - ErlangアプリのGUIフロントエンドとしてNitrogenを使用するにはどうすればよいですか?

コマンドラインで起動する基本的なサーバー側のErlangアプリ(まだ完全にOTPされていません)があります。ブラウザを窒素(バージョン2.0.4)のGUIとして使ったインタラクティブシステムにしたいと思います。一般的な計画は

  • 現在のモジュールをMODEL部分としてgen_serverに変換します。データを分析し、関心のあるデータの特定のプロパティを反映するイベントを生成します。
  • gen_event(モデルによって生成されたイベントを取得するため)とgen_server(GUIフロントエンドからのクエリを許可するため)の両方であるCONTROLLERモジュールを追加します
  • 窒素をビューとして使用し、コントローラーモジュールへの呼び出し(モデルにクエリを実行する)を通じて、関連するページをAjax機能で更新します。

私が見る限り、モデル、ビュー、コントローラーの3つの子を持つ一般的なアプリケーションスーパーバイザーが必要です。次に、OTP通信モードにマップされたAPIを介して相互に通信します。

そして、これは私が立ち往生しているところです:私はこれらすべてを窒素ディレクトリツリーに入れるべきですか?新しいアプリディレクトリ構造を設定し、その下に3つのコンポーネント(窒素を含む)を含める必要がありますか?アプリスーパーバイザーの子としてNitrogenサーバーを起動するには、正確に何をする必要がありますか(Nitrogen起動スクリプトは予想よりもかなり複雑に見えます)?ErlangとOTPinActionを使い始めましたが、まだ完了していません。そして、明後日、システムのデモを行う必要があります;)

コマンドラインで「start.sh」と入力し、ブラウザーを使用して窒素経由でアプリに接続します。

0 投票する
1 に答える
514 参照

validation - 窒素を使用した erlang での検証

私はアーランで窒素を使って簡単なことをしようとしています。テキストフィールドの検証を正常に設定しました:

ここで、desk_name はテキストボックスで、submit はページの下部にあるボタンです。

パネルについても同じことをしたいだけです。ただし、この同じコードを使用しても機能しないようです。

テキストボックス以外のフィールドを検証する方法はありますか??

あなたの助けに本当に感謝します!ありがとうございました。

0 投票する
1 に答える
996 参照

erlang - Mnesiaレコードの時間関連の制約を効率的に処理するにはどうすればよいですか?

私は記録をmnesiaに書き込んでいますが、それは許可された時間(24時間)だけそこに保持する必要があります。24時間後、ユーザーがそれらの一部を変更する前に、システムはそれらを自動的に削除する必要があります。たとえば、ユーザーには、特定の時間に使用する必要のある無料の通話時間(音声通話用)が与えられます。使用しない場合は、24時間後に、システムはこれらのリソース予約をユーザーレコードから削除する必要があります。

さて、これはタイマーをもたらしました。レコード構造の例は次のとおりです。

レコード内のタイマーオブジェクトは重要です。ユーザーがタイムアウトする前に予約されたリソースを最終的に使用した場合(またはタイムアウトした場合)、システムはtimer:cancel/1このオブジェクトからタイマーサーバーを解放するために呼び出すことができます。問題は、これらのレコードのタイマーを処理する2つの方法があります。

オプション1:トランザクション内で処理されるタイマー

上記のオプションについて。

Mnesiaのドキュメントによると、トランザクションは(何らかの理由で)成功するまでtmマネージャーによって繰り返されるio:format/2可能性があるため、書き込みや読み取りとは関係のないコードを配置すると、トランザクションが数回実行される可能性があります。このステートメントにより、この時点で一時停止し、トランザクション自体からタイマーを処理する方法を考えたので、コードを次のように変更しました。

オプション2:トランザクション外で処理されるタイマー

予約のタイムアウトを処理するためのコード:

オプション2では、理由によりmnesia_tmがトランザクションを再実行した場合でも、タイマー処理コードを除外する方が安全だと思いました。このコードは2回実行されません(同じものに対して複数のタイマーオブジェクトを使用しないようにします)。記録)。

質問1:これら2つの実装のどちらが正しいですか?および/または間違っていますか?(また)両方が間違っているかどうか教えてください

質問2:モジュールタイマー、本番環境で多数のタイマージョブを処理するのに適していますか?

質問3: mnesia上で実行されるSean Hindeのtimer_mn-1.1と比較して、タイマーモジュール(おそらくEtsテーブル上で実行される)は本番環境で(実際には)機能が劣っていますか?(それ自体がmnesiaを使用しているシステムでSean Hindeのtimer_mnを使用することは、スキーマの変更、ノードの問題などの点で問題があるように見えるため、これを求めています)

誰かがmnesiaのタイマー関連の問題を処理する別の方法を持っているなら、私に更新してくださいありがとうみんな...

0 投票する
1 に答える
219 参照

erlang - 窒素リッスンIPアドレスについて混乱

Windows 7 Home Premium、HP PavilionEntertainmentPCラップトップでNitrogen2.0.Xを実行しています。窒素はinetsで始まり、WebサーバーのIPアドレスを変更または指示できませんでした。起動すると、ブラウザに移動して、http://localhost:8000以下のシェル出力を押すように指示されます。

利用可能なほとんどすべてのブラウザでリンクを押すと、ページが見つからなかったことがわかります。エミュレーターにポートについて尋ねると、これがその出力です。

whileinet6_tcpを使用するということを意味する強い考えを持っていますが、これについてはよくわかりません。しかし、全体として、私は自分の窒素に接続できません。以下は実行中のアプリケーションですIPv6inet_tcpIPv4

http://localhost:8000上記の観察結果を踏まえて、ブラウザを押すだけではローカル窒素フレームワークに到達できない理由を誰かが説明できますか?また、ブラウザから接続するにはどうすればよいですか?

0 投票する
1 に答える
166 参照

erlang - OTP14B02構成エラー

OpenSolarisにOTP14B02をインストールしようとしましたが、呼び出し時に次のエラーが発生します./configure

この問題の原因は何で、どうすれば解決できますか?

0 投票する
0 に答える
1568 参照

erlang - Mnesia フラグメンテーションとレプリケーション: 結果として得られる可用性と信頼性

記憶喪失の断片化について最近尋ねた質問の解決策に続いて、私にはまだ多くの課題があります. 次のシナリオを考えてみましょう (私が尋ねている質問は、以下の内容に基づいています)。

企業内で高可用性が必要なデータ駆動型のエンタープライズ アプリケーションがあります
。何らかの理由で内部情報ソースがダウンした場合、エンタープライズ アプリケーションはオフサイト (リモート)のリカバリ センター
からデータを取得するように切り替える必要があります。


企業内の 2 つのノード( DB サイド AおよびDB サイド Bと呼ばれる)にデータベースを複製することにしました。これら 2 つは別々の
ハードウェアで実行されていますが、ファスト イーサネットまたは光ファイバー リンクなどでリンクされています。論理的には、これら2 つの Mnesia DB
間に何らかのトンネルまたは安全な通信を作成します。
2 つ (A と B) には同じデータのレプリカがあり、
常に同期している必要があります。

一方、攻撃やハードウェア障害
によってローカル データ アクセスが切断された場合に備えて、リカバリ センターにも同じデータのコピーがあり、常に同期されている必要があります。したがって、同じデータベース スキーマを 3 つのサイト ( A側、B 側、および復旧センター
)に複製する必要があります。

現在、企業内では、アプリケーション ミドルウェアがデータベース サイト間でデータ要求を切り替えることができます。A がダウンしている場合、アプリケーションがそれを認識することなく、リクエストはデータベース B に再ルーティングされます。ミドルウェア レイヤーは、ロード バランシング (要求の多重化) を行うように構成したり、フェイルオーバー技術を使用して柔軟になるように構成したりできます。

さらなる分析

ここで、テーブルの作成時に、mnesia テーブルを断片化する必要があります。したがって、次のパラメータを決定します。

すべてのテーブルは、次の配置に基づいて作成されます注: 上記の構文でRECORD_NAME_HEREは、レコードは Erlang でのコンパイル時に認識されている必要があるため、実際には変数にすることはできません。インストールから、各テーブルについて、すべてのフラグメント (たとえば、table_name_frag2) がすべてのノードのファイル システムに表示されることがわかります。

課題と発生する質問:
上記の内容に従った後、mnesia がすべてのノードで実行されているため、最初のデータベースの起動は問題ありません。アプリケーションが実行されると、いくつかの課題が現れ始め、以下にリストされています。

  1. すべての書き込みが最初に試行されDB Side A、その瞬間にサイド A が利用できない場合、呼び出しが再試行されDB Side Brecovery center3 つのデータベース ノードすべてで呼び出しが返されなかった場合、アプリケーション ネットワークミドルウェアレイヤーは、データベースサーバーがすべて利用できないことを報告します (この決定は、アプリケーションが mnesia レプリカにランダムに書き込むようにすると、mnesia ノードが失われた場合に一貫性のないデータベースエラーが表示される可能性が非常に高いという事実に影響された可能性があります)相互にネットワーク接続されていますが、異なる Erlang アプリケーションによってそれぞれに書き込みがコミットされています. を使用することmaster_nodesにした場合、データを失う危険性があります) したがって、行動によって、あなたは強制していますDB Side Aマスターになる。これにより、他のデータベース ノードが稼働している間は常にアイドル状態になり、DB Side Aサイド A にヒットするリクエストと同じ数のリクエストがダウンすることはありません。サイド B とリカバリ センターにリクエストがヒットすることはありません。

  2. 通常、Mnesia は開始時に、関連するすべてのノードが実行されていることを確認する必要があります (関連するすべてのノードで mnesia が実行されている必要があります)。これにより、ネゴシエーションと一貫性チェックを行うことができます。これは、mnesia がすべてのノードでダウンした場合、完全に初期化してテーブルをロードする前に、すべてのノードで mnesia を開始する必要があることを意味します。Erlang VM がリモート サイトで Mnesia と一緒に停止すると、さらに悪化します。まあ、あちこちでいくつかの微調整とスクリプトを実行すると、VM 全体と目的のアプリケーションがダウンした場合に再起動するのに役立つ可能性があります。

長い話を短くするために、質問に行きましょう。

質問:

  1. inconsistent_database, starting to run database behind a partitioned networka を設定するmnesia master nodeことが望ましくない状況で (データ損失の恐れがあるため) 、 mnesia が のイベントを生成した場合、データベース管理者はどうしますか?

  2. 私の申請に関する記憶喪失イベントの結果はどうなりinconsistent_database, starting to run database behind a partitioned networkますか? 私がこの出来事に反応せず、物事をそのままにしておくとどうなりますか? データが失われていますか?

  3. 大規模な mnesia クラスタで、Mnesia がリモート サイトの Erlang VM と一緒にダウンした場合、何ができるでしょうか? この状況を自動的に処理する既知の適切な方法はありますか?

  4. ネットワークの問題や障害が原因で 1 つまたは 2 つのノードに到達できない場合があり、生き残ったノードの mnesia は、特にindexes. 実行時に、一部のレプリカがダウンした場合、アプリケーションの動作はどうなるでしょうか? mnesia クラスター内にマスター ノードを配置するようアドバイスしていただけますか?

上記の質問に答える際に、可用性を確保できるかどうかにかかわらず、最初に説明したレイアウトを強調することもできます。実稼働環境で mnesia の断片化および複製されたデータベースを使用した個人的な経験を提供できます。このテキストの冒頭にあるリンクされた (引用された) 質問を参照して、フラグメントの数、オペレーティング システムの依存関係、ノード プールのサイズ、テーブルのコピーの種類など、データベースの作成時に信頼性を高めることができる代替設定を提供してください。など

0 投票する
1 に答える
217 参照

apache - yaws Web アプリケーションでのヒット数のカウント

yaws Web サーバーから Web アプリケーションを実行している場合、ユーザーからサイトへのヒット数をどのように数えますか? 次のように、yaws ログにある自分のサイト

のファイルの行数をカウントする基本的な方法を使用しようとしました。.access

yaws 上で実行されている自分のサイトでソファーを受け取ったヒット数を調べるより良い方法を教えてください。