该应用程序是Sean Corfield的usermanager-example项目的剥离变体(从COMPS SHA 2A9CF63同步)。
肖恩(Sean)的原始“用户管理器”示例项目及其变体(包括此),旨在揭开“如何仅使用库构建Clojure Web应用程序?” 。
在Clojure World的规范心理模型中,包括编程Web的“继承”,“框架上的库”和“数据取向”特征。缺乏这些关键直觉,即使是新手的Clojure的经验丰富的开发人员倾向于使用库来构建应用程序。演示的“用户经理”集体旨在应对这一特定挑战。他们不想教网络开发最佳实践。为此,所有“用户管理器”示例都是小的,简化的,“ Web 1.0”样式应用程序。
该项目扩展了我在“ Clojing the Web应用程序堆栈:冥想One ”中写下的“第一原理”底漆。我选择使用Sean的原始演示应用程序作为规范,因为:
如果没有别的,那就存在自己的瘙痒...我喜欢准骨解释,喜欢掉下来“等等,但是为什么呢?”兔子孔和切线。
您会看到,所有其他“用户管理器”演示虽然很简单,虽然很简单,但它是由Clojure Professionals在实际生产Web应用程序中使用的库构建的。因此,如果库是一个人(自定义)Web堆栈(或框架)的先驱...库的前身是什么?没有库:)
在您通过此代码库进行工作时,请保持原始用户经理和我的博客文章的并排参考。
如果有什么不清楚或错误,请随时打开问题(但请不要更改代码的结构)。
我已经制作了它,以帮助读者观察该应用程序的“制作”。根据所讨论的提交,请咨询读书文件,以了解与该开发点相关的使用指令。
我认为我们通过逐渐从近似粗粒的心理模型到高保真性而学习得更好。因此,一些故意的简化可能会惹恼网络专业人员(例如使用删除)。一个人信任学习者,可以从他们的研究,实验,同事和导师的总和中获取“正确”的方法来做事。
学习时,有时会躁动不安;)
期望什么,如果您从第一个提交中锻炼:
curl请求。 curl localhost:3000
curl -XPOST localhost:3000/some/path?q=somethingsomething
curl -XDELETE localhost:3000/foo/bar/baz
usermanager.main名称空间应始终具有启动/停止服务器进程(和/或应用程序的当前状态)的当前方式。usermanager.*名称空间,这是一个线索。usermanager.main中的启动/停止实用程序。启动重新启动后,应放松您的服务器。dev/目录(您可能必须手动创建它)。department和addressbook )。dev数据库...就像我提到的那样,我减去了尽可能多的图书馆,而不会损害原始项目的设计。例外是,我们的Web应用程序与外界之间的任何形式的主机互动。我假设有这些需求的预先存在的解决方案(库)(我必须在某个地方绘制边界!)。同样,一些生物舒适的公用事业对这一原则解释的主题并不核心。
回到博客文章中,以更好地了解我在哪里以及为什么要绘制这个边界。
具体来说,我使用过:
为了忠实于肖恩(Sean)对Usermanager的API,域模型和核心“业务逻辑”的规范,我对他的Usermanager-example来源有直接的部分:
为了加强使用普通的Clojure数据编写运动部件的想法,我制作了代码来使用Sean做出的设计选择(例如,在请求上下文中注入视图名称,以便以后通过HTML Rendering Logic使用)。同样,要忠于环规范,所有自编写的环戒指实用程序和中间件都遵循环规范。用戒指的原件代替它们应该很简单。
如果您选择编写自己的变体,我建议您采用效法。
到目前为止,这应该很明显,但是我无论如何都会说...剥离的应用程序对现实世界的需求根本不强大,因为它省略了其他“用户管理器”示例所使用的几乎所有库,这些示例可为我们带来所有“生产等级”繁重的举重。即使这些应用程序也需要对它们进行一些工作(设计审查,集成测试,安全检查等),如果它们有资格参加现实世界中的部署。
与Sean的Usermanager-example项目相同。
deps.edn文件。tools.build库将使用build.clj文件中的命令。它通过:build deps.edn文件的构建别名包含。 clojure-cli using项目使用惯例使用这样的build.clj文件,以提供标准和自定义的项目构建功能。项目骨架设置工具通常自动生成此文件。我已经从肖恩的项目中复制了它。克隆仓库, cd中,然后遵循以下任何方法尝试应用程序和/或部署它。请注意,所得应用不适合生产部署。当然,请随意部署它,但仅在Thraway Server实例上将其暴露于公共Internet。
从项目的根部开始以这种方式运行测试。
clojure -T:build test
这使用:build别名来加载build.clj文件,基于tools.build ,并运行test任务。
希望测试过去!您应该看到这样的东西:
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
开始替补
clj -M:dev:test
启动后,在默认端口(端口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” - 一个.jar文件,其中包含clojure本身以及您的应用程序及其依赖项中的所有代码,因此您可以使用java -jar命令运行它。 (但是就像我之前说过的那样,这个项目不是生产软件。因此,将其部署到抛弃服务器环境中。)
上面提到的build.clj文件 - 包含一个ci任务,该任务:
target文件夹.jar文件 clojure -T:build ci
这应该产生与上面test相同的输出,然后产生类似的输出:
Copying source...
Compiling usermanager.main...
Building JAR...
如果target文件夹不存在,则将创建一个classes夹,其中包含一个包含usermanager应用程序中所有编译的Clojure源代码及其所有依赖项(包括Clojure本身)的类文件夹:
ls target/classes/
hiccup hiccup2 public ring usermanager
它还将包括您可以这样运行的独立.jar文件:
java -jar target/usermanager/example-standalone.jar
这应该与上述应用程序示例相同。
该JAR文件可以部署到任何已安装Java并没有其他外部依赖性或文件的服务器。
我可能会演示如何使用生产Clojure库替换每个手卷。
但是,也许您可以用自己的话来做自己的作业! :)
与其他示例项目相比,与线索相比。
愿来源与您同在!
版权(C)2015-2024 Sean Corfield。版权(C)2024 Aditya Athalye。
根据Apache源许可证2.0分发。