このアプリは、Sean CorfieldのUsermanager-Example Project(Commit Sha 2A9CF63のように同期されている)の剥奪されたバリアントです。
Seanのオリジナルの「ユーザーマネージャー」の例プロジェクトとそのバリエーション(これを含む)は、 「ライブラリのみを使用してClojure Webアプリケーションを構築する方法?」 。
Clojure Worldのプログラミングのプログラミングを含むプログラミングの標準的なメンタルモデルで、「継承に対する構成」、「フレームワーク上のライブラリ」、および「データ志向」は、目立つように機能します。これらの主要な直感のいくつかがなければ、Clojureに慣れていない経験豊富な開発者でさえ、ライブラリを使用してアプリを構築するのに苦労する傾向があります。デモの「ユーザーマネージャー」集団は、この特定の課題に対処することを目指しています。彼らは、ウェブ開発のベストプラクティスを教えることを目指していません。そのために、すべての「ユーザーマネージャー」の例は、小さく、単純化された「Web 1.0」スタイルのアプリです。
このプロジェクトは、「From First Principles」プライマーを「 Webアプリケーションスタック:Meditation One 」に書き留めました。次の理由で、Seanのオリジナルデモアプリを仕様として使用することにしました。
他に何もなければ、それは自分のかゆみを掻くために存在します...私は裸の骨の説明と「待ってください、しかしなぜですか?」ウサギの穴と接線。
ご存知のように、他のすべての「ユーザーマネージャー」デモは、シンプルではありますが、実際のプロダクションWebアプリでClojureの専門家が使用するライブラリで構築されています。したがって、図書館が(カスタム)Webスタック(またはフレームワーク)の前身である場合...ライブラリの前身は何ですか?図書館はありません:)
元のユーザーマネージャーを便利に保ちます」と私のブログ投稿は、このコードベースを使用する際に並んで参照してください。
不明確な場合、または誤っている場合は、問題を公開してください(ただし、コードの構造を変更しないでください)。
読者がアプリのピースごとの「作成」を観察するのを助けるためにそれを作成しました。開発中のその点に関連する使用手順については、問題のコミットに関するREADMEに相談してください。
おおよその粗粒のメンタルモデルから高忠実なモデルに徐々に進むことで、私たちはより良く学ぶと思います。そのため、いくつかの意図的な単純化は、Webの専門家を困らせる可能性があります(Get To Deleteを使用するなど)。学習者は、研究、実験、同僚、メンターの合計から物事を行う「正しい」方法を拾うことを信頼しています。
学ぶとき、落ち着きがないことは時々良いことです;)
あなたが最初のコミットから前進した場合、何を期待するか:
curlリクエストを発行できるはずです。 curl localhost:3000
curl -XPOST localhost:3000/some/path?q=somethingsomething
curl -XDELETE localhost:3000/foo/bar/baz
usermanager.main名前空間には、サーバープロセス(および/またはアプリの現在の状態)を開始/停止するためのコミュニティの最新の方法が常にある必要があります。usermanager.*名前空間、それは手がかりです。usermanager.mainのStart/Stopユーティリティは、REPLを再起動した後、サーバーの復元を容易にする必要があります。dev/ディレクトリのいずれかを確認します(手動で作成する必要がある場合があります)。departmentとaddressbook )に入力する必要があります。devデータベースをクエリ/変更/検査してください...私が述べたように、私は元のプロジェクトのデザインに忠実を損なうことなく、できるだけ多くのライブラリを差し引いた。例外は、Webアプリと外の世界との間のあらゆる形態のホスト間の相互作用です。私はそれらのニーズのために既存のソリューション(ライブラリ)を想定していました(どこかに境界を描く必要があります!)。また、この第一原理の説明のテーマの中心ではないクリーチャーコンフォートユーティリティもあります。
ブログ投稿に戻って、この境界を描いた場所と理由のより良い写真を撮る。
具体的には、私は以下を使用しました。
UsermanagerのAPI、ドメインモデル、およびコア「ビジネスロジック」のSeanの仕様に忠実であるため、Usermanager-Exampleのまっすぐなパーツを持っています。
Plain Clojureデータを使用して可動部品を構成するというアイデアを強化するために、ショーンが作成した設計の選択を使用するためにコードを作成しました(例:HTMLレンダリングロジックで後で使用するために、リクエストコンテキストでビューの名前を注入します)。同様に、リングの仕様に忠実であるため、すべての自己執筆リングユーティリティとミドルウェアはリング仕様に従います。リングが提供するオリジナルにそれらを置き換えることは簡単です。
独自のバリアントを書くことを選択した場合は、スーツをフォローすることをお勧めします。
それは今までに明らかですが、とにかくそれを述べます...剥がれたアプリは、他の「ユーザーマネージャー」の例で使用されているほぼすべてのライブラリを省略し、私たちのためにすべての「生産グレード」の重い持ち上げを行うため、現実世界の要求にまったく堅牢ではありません。これらのアプリでさえ、実際の展開の資格を得るためには、それらについていくつかの作業(設計レビュー、統合テスト、セキュリティチェックなど)が必要です。
SeanのUsermanager-Exampleプロジェクトと同じです。
deps.ednファイルを提供します。build.cljファイルからコマンドを使用するtools.buildライブラリ。以下に含まれています:build deps.ednファイルのビルドエイリアス。 Clojure-Cli-Usingプロジェクトは、このようなbuild.cljファイルを慣習的に使用して、標準およびカスタムプロジェクトビルド機能を提供します。プロジェクトスケルトンセットアップツールは通常、このファイルを自動生成します。ショーンのプロジェクトからコピーしました。リポジトリをクリックして、 cdを作成し、以下のいずれかの方法に従ってアプリを試してみるか、展開します。結果のアプリは、生産展開に適していないことに注意してください。もちろん、自由に展開してください。ただし、Throway Serverインスタンスでのみパブリックインターネットにさらしてください。
プロジェクトのルートからこのようにテストを実行します。
clojure -T:build test
これは、 tools.buildに基づいてbuild.cljファイルをロードして、 testタスクを実行するために:buildエイリアスを使用します。
うまくいけば、テストが合格します!あなたはこのようなものを見るはずです:
Running tests in #{"test"}
[ Many lines of test runner log messages. ]
Ran 11 tests containing 37 assertions.
0 failures, 0 errors.
ログメッセージについてのメモ:
このプロジェクトのコミット履歴の任意の時点でアプリを実行できます。ただし、利用可能な機能は、そのコミットに組み込まれているものはすべて一致します。
アプリを起動し、ブラウザをhttp:// localhost:3000に向けます。
clojure -M -m usermanager.main
そのポートが使用されている場合は、別のポートで起動します。たとえば、ポート3100:
clojure -M -m usermanager.main 3100
REPLを開始します
clj -M:dev:test
REPLが起動したら、デフォルトのポート(ポート3000)でサーバーを起動します。
user=> ( require 'usermanager.main) ; load the code
user=> ( in-ns 'usermanager.main) ; move to the namespace
usermanager.main=> ( -main ) ; or some other port (-main 8080)ブラウザを適切なURL http:// localhost:portnumberに向けます。
REPLを実行するときは、スタンドアロンであろうと、お気に入りの編集者を介して、 devとtestプロファイルを使用します。
次に、評価/適用してください!
サーバーの展開の場合、通常、「uberjar」を構築する必要があります。つまり、clojure自体とアプリケーションとその依存関係のすべてを含む.jarファイルを作成し、 java -jarコマンドで実行できます。 (しかし、先に述べたように、このプロジェクトは生産ソフトウェアではありません。したがって、サーバー環境を捨てるだけに展開します。)
上記のbuild.cljファイルには、次のciタスクが含まれています。
targetフォルダーをクリーンアップします.jarファイルを生成します clojure -T:build ci
これにより、上記のtestと同じ出力が生成され、次に次のようなものが続きます。
Copying source...
Compiling usermanager.main...
Building JAR...
targetフォルダーは存在しない場合に作成され、 usermanagerアプリケーションからコンパイルされたすべてのClojureソースコードと、Clojure自体を含むすべての依存関係を含むclassesフォルダーが含まれます。
ls target/classes/
hiccup hiccup2 public ring usermanager
また、このように実行できるスタンドアロン.jarファイルも含まれます。
java -jar target/usermanager/example-standalone.jar
これは、上記のアプリケーションの例を実行するのと同じように動作するはずです。
このJARファイルは、Javaがインストールされ、他の外部依存関係やファイルを使用して実行されていないサーバーに展開できます。
プロダクションClojureライブラリを使用して、各手巻きのピースを交換する方法をデモするかもしれません。
しかし、たぶんあなたは自分の言葉で、自己割り当てされた宿題としてそれをすることができます! :)
手がかりについては、他のUsermanager-Exampleプロジェクトと比較して対比してください。
ソースがあなたと一緒にいるように!
Copyright(c)2015-2024 Sean Corfield。著作権(c)2024 Aditya Athalye。
Apache Sourceライセンス2.0の下で配布。