Art*_*ldt 6 java google-app-engine clojure compojure appengine-magic
在这里,我正在使用java.rmi.server.UID哪个令人不安的GAE.之后:只有我对骨头的依赖我才陷入僵局.
(ns helloworld.core
(:use ;[hiccup.core]
[hiccup.page-helpers :only (html5 include-css)]
[clojure.contrib.string :only (split)]
[compojure.core :only (defroutes GET)]
[hiccup.middleware :only (wrap-base-url)])
(:require [appengine-magic.core :as ae]
[compojure.route :as route
:only (resources not-found) ]
[compojure.handler :as handler :only (site)])
(:gen-class :extends javax.servlet.http.HttpServlet))
(defn index-page
([name]
(html5
[:head
[:title (str "Hello " name)]
(include-css "/css/style.css")]
[:body
[:h1 (str "Hello " name)]]))
([] (index-page "World")))
(def match-opperator
{ "add" +
"subtract" -
"multiply" *
"divide" /})
(defroutes hello-routes
(GET "/:f/*" [f & x]
(index-page (apply (match-opperator f)
(map #(Integer/parseInt %)
(split #" " (:* x))))))
(GET "/" [] (index-page))
(route/resources "/")
(route/not-found "Page not found"))
(def app
(-> (handler/site hello-routes)
(wrap-base-url)))
(ae/def-appengine-app helloworld-app #'app)
Run Code Online (Sandbox Code Playgroud)
我可以在jetty中加载它并且工作正常,将它加载到dev-appserver后我得到:
HTTP ERROR 500
Problem accessing /multiply/1%202%204%208. Reason:
java.rmi.server.UID is a restricted class. Please see the Google App Engine developer's guide for more details.
Caused by:
java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class. Please see the Google App Engine developer's guide for more details.
at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at org.apache.commons.fileupload.disk.DiskFileItem.(DiskFileItem.java:103)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at ring.middleware.multipart_params$loading__4414__auto__.invoke(multipart_params.clj:1)
at ring.middleware.multipart_params__init.load(Unknown Source)
at ring.middleware.multipart_params__init.(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at clojure.lang.RT.loadClassForName(RT.java:1578)
at clojure.lang.RT.load(RT.java:399)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4519.invoke(core.clj:4915)
ps:这是我的project.clj,这有助于:
(defproject helloworld "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]
[org.clojure/clojure-contrib "1.2.0"]
[compojure "0.6.2"]
[hiccup "0.3.4"]]
:dev-dependencies [[appengine-magic "0.4.1"]
[swank-clojure "1.2.1"]])
FWIW我认为:only不会对GAE产生一些影响.它可能正在观察您加载的类,并且拒绝refer函数不会阻止其加载代码.
除了查看堆栈跟踪之外没有特定于域的经验,我认为可能导致问题的处理程序compojure.handler/site包括wrap-multipart-params.我怀疑你的应用程序需要这个功能,所以看看你是否可以使用compojure.handler/api.然后,如果site您确实需要特定的包装器,请手动将它们包装起来.
再说一次,鉴于我之前关于加载类的观点,我想代码multipart-params就是require在compojure.handler命名空间后立即加载,所以你之后做的可能并不重要.我想你甚至可能只是做所有的包裹从api和site手动; 这不是很复杂.然后你应该能够避免require使用multipart-params命名空间.
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |