3

Clojure ベースのチャット ボットを使用して、典型的な leiningen の方法で起動しlein runます。このアプリにフロント エンドを追加したいのですが、その方法がよくわかりません。compojure、lib-noir、および ring に関するドキュメントを読むと、サービスを提供する標準的な方法はlein ring server. 可能であれば、単一の lein コマンドでアプリとフロントエンドを起動したいだけです。これには、サーバーを(おそらく別のスレッドで)手動で起動する必要がありますか(run-jetty handler {:port 3000})、または誰かがより良いアプローチを推奨できますか?

4

1 に答える 1

2

あなたの場合、「フロントエンド」の下で何を理解していますか? 2つの可能性が見えます。

1 つ目は、Clojure ボットが完全にスタンドアロンであり、対話する外部インターフェイスがある場合です。この場合、フロントエンドは、この外部インターフェイスを介してボットと通信する別のアプリケーションになります。実際、この場合、単一の lein コマンドでプログラムを開始したい場合は、-main最初にボットを実行し、次に、サーバーを起動します。ただし、サーバーを起動する正確なコマンドはわかりません。あなたのものは私には問題ないように見えますが、この種のスタートアップは非推奨であるとどこかで読んだと思います...

もう 1 つの可能性は、Web アプリをボットに統合する場合です。この場合、ボットの名前空間を直接使用するように webapp を作成するだけです。関数は必要なく、コマンド-mainを実行するだけです。lein ring server

2 番目の方が明確に見えますが、ボットの全体的なアーキテクチャによって異なります。

アップデート。

ring と leiningen がどのように連携するかを詳しく調べたところ、必要なものを取得する最も簡単な方法は次のように思われます。まず、readme の指示に従ってlein-ringプラグインをインストールします。 次に、次のように構成します。
project.clj

(defproject your-project "0.0.1"
  :dependencies [...]
  ...  ; All other configuration
  :ring {:handler your-namespace.web/handler
         :init your-namespace.bot/init})

ほら、ファイルに追加のオプションが必要project.cljです(上記でリンクしたreadmeに記載されています)。:handlerメインの Web アプリケーション ハンドラーです (それが何であり、なぜ必要なのかについては、リングのドキュメントを参照してください)。:initあなたの初期化関数でなければなりません。これはまさに、ボットを開始するためにコードを追加する必要がある場所です。
最後に、lein ring serverコマンドを発行して webapp を開始します。:initこれにより、最初にで指定した関数が呼び出されproject.clj、次にボットが起動され、次に webapp が起動されます。

于 2013-01-13T08:07:53.467 に答える