我想使用Clojure和Compojure在GAE上开发应用程序,使用Eclipse或Idea,emacs不是一个坏主意:P
那么这是最好的方法呢?我不认为我想使用leiningen,因为我相信如果你通过学习曲线,maven可以非常强大 - 我读了这篇博客http://compojureongae.posterous.com/tag/googleappengine,其中'到现在为止是一个最好的信息来源.
如果你必须这样做,你的方法是什么?或者你会推荐我什么?
这个插件 - > http://code.google.com/p/maven-gae-plugin/好吗?因为如果我使用那个插件我可以在pom.xml中包含clojure.jar,基本上我已经准备好了,对吧?IntelliJ IDEA有类似之处吗?
还有其他建议吗?这是你的方法吗?
我知道可以使用创建war文件lein ring war,但它似乎仍然包含jetty依赖项.当我构建战争(并在tomcat上部署)时,有没有办法排除jetty依赖项?
如果我不能做到这一点,或者只是额外的罐子/类文件被打包到战争中但从未真正使用过?
有没有办法将clojure函数作为字符串返回?我正在制作一些在线文档,我真的希望能够通过某种方式将函数评估为文本来将代码添加到html中.
谢谢
我可以通过以下方式轻松获取请求参数:
(:foo params)
Run Code Online (Sandbox Code Playgroud)
但是,当我有这样的请求时:
/api?foo=1&foo=2&foo=3
Run Code Online (Sandbox Code Playgroud)
我只是回来,"3"而我期待一个阵列["1","2","3"].
我不确定为什么会这样,因为当我查看代码时:
https://github.com/ring-clojure/ring-codec/blob/master/src/ring/util/codec.clj#L128
它似乎调用assoc-conj哪个应该将同名的多个参数转换为包含值的向量.
我在这里遗漏了什么或这是一个错误吗?
org.clojure/clojure-contrib"1.2.0"ring"1.1.8"compojure"1.1.5"clout"1.1.0"
(defroutes rest-routes
(GET "/" [] "<p> Hello </p>")
(POST "/api/v1/:stor/sync" [stor] (start-sync stor))
(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] [stor txn file] (txn-add stor txn file))
(ANY "*" [] "<p>Page not found. </p>"))
Run Code Online (Sandbox Code Playgroud)
在第二个POST中,我还想将所有http-header传递给"txn-add"处理程序.我做了很多谷歌并查看代码,但找不到任何有用的东西.
我知道,我可以使用以下方法来传递标题(但是它不会解析网址请求),
(POST "/api/v1"
{headers :headers} (txn-add "dummy stor" "dummy txn" headers))
Run Code Online (Sandbox Code Playgroud)
另外,如何将POST请求的内容(即:正文)传递给"txn-add"?
我正在尝试将Friend身份验证和授权集成到Clojure/Compojure单页Web应用程序中.
我有一个由Angular控制器支持的登录表单,该控制器使用AJAX对Web应用程序验证用户名和密码,并获取经过身份验证的用户记录.因此,我不希望Friend基于表单的登录提供默认行为 - 我基本上想要依赖HTTP状态代码,而且我不想要任何朋友页面重定向.
例如,制作未经身份验证的请求应该只返回401状态代码,而不应重定向到"/ login".我通过在配置好友时指定自定义的":unauthenticated-handler"(下面包含的代码)来完成此部分.
在成功登录后,我只需要200状态代码,而不是重定向到最初请求的页面.这是我无法工作的.
我根据各种示例编写了一个自定义的朋友身份验证工作流程(我的Clojure技能现在是初学者级别):
(defn my-auth
[& {:keys [credential-fn]}]
(routes
(GET "/logout" req
(friend/logout* {:status 200}))
(POST "/login" {{:keys [username password]} :params}
(if-let [user-record (-> username credential-fn)]
(if
(and
[user-record password]
(creds/bcrypt-verify password (:password user-record)))
(let [user-record (dissoc user-record :password)]
(workflows/make-auth user-record {:cemerick.friend/workflow :my-auth :cemerick.friend/redirect-on-auth? true}))
{:status 401})
{:status 401}))))
Run Code Online (Sandbox Code Playgroud)
这是我的中间件声明的处理程序:
(def app
(->
(handler/site
(friend/authenticate app-routes
{:credential-fn (partial creds/bcrypt-credential-fn my-credential-fn)
:unauthenticated-handler unauthenticated
:workflows [(my-auth :credential-fn my-credential-fn)]}))
(session/wrap-session)
(params/wrap-keyword-params)
(json/wrap-json-body)
(json/wrap-json-response {:pretty true})))
Run Code Online (Sandbox Code Playgroud)
以及上面引用的附加处理函数: …
在开发基于组件/环的clojure应用程序时,emacs/cider的正确工作流程/使用途径是什么?
我觉得我可以"附加"到我正在运行的compojure/ring-process,更改其代码,读取/更改其数据,但我无法理解我该如何做到这一点?什么是正确的方法?
我所做的?
lein new compojure my-project
cd my-project
lein ring server-headless
Run Code Online (Sandbox Code Playgroud)
开发服务器现在运行.如果我更改项目中的文件,它们将自动重新加载.那很好.但我想要的是,我直接附加到流程并更改其功能,例如.
我明白这是可能的,但我无法理解.
我正在尝试为compojure构建hello-world示例,但它无法启动响铃任务.
$ lein version
Leiningen 1.7.1 on Java 1.7.0_65 OpenJDK 64-Bit Server VM
$ lein new compojure test
Created new project in: /home/myaccount/test
Look over project.clj and start coding in compojure/core.clj
$ cd test/
$ lein ring server
That's not a task. Use "lein help" to list all tasks.
Run Code Online (Sandbox Code Playgroud)
我也试过在发光网站上使用hello-world ,这也说它无法找到那个任务或其他例子,lein抱怨我使用了错误的参数数量,即使我直接从他们的教程.
$ lein new luminus guestbook +h2
Wrong number of arguments to new task.
Expected ([project-name] [project-name project-dir])
Run Code Online (Sandbox Code Playgroud) 我对Clojure和Compojure Web开发相对较新.在我正在构建的玩具示例中,我注意到的第一个问题是HTML模板.我想支持Rails中的partials或Django使用的模板框架.
目前我有:
(defn index-page []
(html5
[:head
[:title "Home | Compojure Docs"]
(include-css "/css/bootstrap.min.css")
(include-css "/css/bootstrap-responsive.min.css")]
[:body
[:div {:class "container-fluid"}
[:div {:class "row-fluid"}
[:div {:class "span2 menu"}]
[:div {:class "span10 content"}
[:h1 "Compojure Docs"]
[:ul
[:li
[:a {:href "/getting-started"} "Getting Started"]]
[:li
[:a {:href "/routes-in-detail"} "Routes in Detail"]]
[:li
[:a {:href "/destructuring-syntax"} "Destructuring Syntax"]]
[:li
[:a {:href "/nesting-routes"} "Nesting Routes"]]
[:li
[:a {:href "/api-documentation"} "API Documentation"]]
[:li
[:a {:href "/paas-platforms"} "PaaS Platforms"]]
[:li
[:a {:href "/example-project"} "Example Project"]]
[:li …Run Code Online (Sandbox Code Playgroud) 我正在尝试用compojure编写我的第一个Web应用程序.我正在使用ccw,而且我File-New-Project, Clojure Project使用"compojure"leiningen模板.最终看起来像project.clj
(defproject asdf "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.4.0"]
[compojure "1.1.5"]]
:plugins [[lein-ring "0.8.2"]]
:ring {:handler asdf.handler/app}
:profiles
{:dev {:dependencies [[ring-mock "0.1.3"]]}})
Run Code Online (Sandbox Code Playgroud)
src/asdf/handler.clj看起来像
(ns asdf.handler
(:use compojure.core)
(:require [compojure.handler :as handler]
[compojure.route :as route]))
(defroutes app-routes
(GET "/" [] "Hello World")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
Run Code Online (Sandbox Code Playgroud)
我发现我可以从命令行运行它lein ring server,但我不知道如何从eclipse运行它.我当然希望不仅能够运行它,还能调试它并设置断点等.在eclipse中有没有办法做到这一点?或者,如果没有,IntelliJ/La-Clojure怎么样?(我现在有点害怕emacs,但也许如果它超级简单我会尝试一下).
或者,这不是一个compojure应用程序的典型开发过程吗?(如果不是,那是什么?只是跑步lein ring server并祈祷?)
如果它有所作为,这是在Win7上.