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