Oh that's great Paul. Thanks for the insight. It's going to help when I get
deeper into this project.


Cheers
Tim


On Mon, May 6, 2013 at 7:44 PM, Paul deGrandis <paul.degran...@gmail.com>wrote:

> Hi Tim,
>
> I'm just seeing this now.  Someone reported a similar problem on the
> Shoreleave mailing list not too long ago.
>
> The problem is the handling of keywords in CLJS (as you found out).
> Internally, Shoreleave takes care of this for you if you use the macros
> and not the direct functions.  Moving forward, I'd suggest you use the
> macros and everything should work as expected (namespacing and all)
>
> If you ever run into a problem with Shoreleave, take a look at
> shoreleave-baseline[1].  There's a branch called `kitchen-sink` that
> exercises all pieces of all the shoreleave modules.  It serves as a great
> place to harvest idiomatic examples.
>
> [1] https://github.com/shoreleave/shoreleave-baseline
>
> Cheers,
> Paul
>
>
>
> On Monday, May 6, 2013 12:55:04 PM UTC-7, frye wrote:
>
>> Ok, I got this working too. Turns out that *namespaced keywords* do not
>> keep their namespaces as they are transferred from Clojurescript, over to
>> Clojure-land. This was causing my named remote function, not to be seen.
>> Anyways, hopefully this can help someone in future.
>>
>>
>> Cheers
>> Tim
>>
>> On Mon, May 6, 2013 at 1:59 PM, Timothy Washington <twas...@gmail.com>wrote:
>>
>>> Ok, I got this sorted.
>>>
>>>  *A)* I used :optimizations :simple , and the JS files are separated
>>> out
>>> *B)* There was a stale version of clojurescript referenced in my
>>> project.clj file. I just removed that, cleaned out gen'd files with `lein
>>> cljsbuild clean`, then iii) `lein cljsbuild (once|auto)`.
>>>
>>>
>>> Then my edgar.js loads as expected. HTH.
>>>
>>>
>>> *BUT*, now when my client tries to go to "*http://localhost:8080/_
>>> shoreleave*", it gets a 404, "*Remote not found.*" error. Now the
>>> marginali docs (see 
>>> here<http://shoreleave.github.io/shoreleave-remote-ring/>)
>>> show that the function wrap-rpc, should be setting up that just remote. Is
>>> there any other magic I need to throw in?
>>>
>>>
>>>    (ns edgar.handler
>>>     (:gen-class)
>>>     (:import [java.io File])
>>>     (:use [clojure.core.strint]
>>>           [compojure.core]
>>>           [ring.middleware.params]
>>>           [ring.middleware.multipart-**params]
>>>           [ring.adapter.jetty])
>>>     (:require [clojure.tools.logging :as log]
>>>               [compojure.handler :as handler]
>>>               [compojure.route :as route]
>>>               [ring.util.response :as ring-response]
>>>                [clojure.java.io :as io]
>>>               [shoreleave.middleware.rpc :as rpc]
>>>               ))
>>>
>>>    (defn *remote-fn* [arg1 & remaining]
>>>     "thing")
>>>
>>>   (rpc/defremote ^{:remote-name :handler/heartbeat} *remote-fn*)
>>>
>>>   (defroutes *app-routes*
>>>      (GET "/" [] (ring-response/file-response "include/index.html" {
>>> :root "public"}))
>>>     (route/files "/" { :root "public"})
>>>     (route/resources "/" { :root "public"})
>>>      (route/not-found "Not Found"))
>>>
>>>    (def app
>>>     (-> *app-routes*
>>>         *rpc/wrap-rpc*
>>>         handler/site
>>>          wrap-params
>>>         wrap-multipart-params
>>>          ))
>>>
>>>   (defn -main []
>>>     (let [port (Integer. (get (System/getenv) "PORT" "8080"))]
>>>       (run-jetty app {:port port :join? false})))
>>>
>>> *handler.clj*
>>>
>>>
>>> Thanks
>>> Tim
>>>
>>>
>>> On Mon, May 6, 2013 at 12:14 PM, Timothy Washington 
>>> <twas...@gmail.com>wrote:
>>>
>>>> Hi there,
>>>>
>>>> I'm trying to use 
>>>> shoreleave-remote<https://github.com/shoreleave/shoreleave-remote>(and
>>>> shoreleave-remote-ring<https://github.com/shoreleave/shoreleave-remote-ring/>)
>>>> in my Clojurescript application, and am running into a few problems.
>>>>
>>>>
>>>>
>>>> *A)* With the i) Clojurescript and ii) HTML code below, in Chrome,
>>>> main.js gives me the error "Uncaught Error: Namespace "edgar" already
>>>> declared.". I'm using lein-cljsbuild, and this happens whether
>>>> compiled with :optimizations :whitespace or :advanced.
>>>>
>>>>   (ns edgar
>>>>     (:require-macros [shoreleave.remotes.macros :as macros])
>>>>     (:require [clojure.browser.repl :as repl]
>>>>               [shoreleave.remotes.http-rpc :as rpc]))
>>>>
>>>>   (rpc/remote-callback :handler/heartbeat ["heartbeat"]
>>>>                        #(js/alert %))
>>>>
>>>>  *edgar.cljs*
>>>>
>>>>
>>>>   <html>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     <head>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       <meta charset='UTF-8'>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       <title>Edgar: At your command</title>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     </head>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     <body>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       <div id='content'>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>         <script src='javascript/main.js' type='text/javascript'></**script>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>         <script src='javascript/edgar.js' 
>>>> type='text/javascript'></**script>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>         <script type='text/javascript'>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>           goog.require("edgar")
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>         </script>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       </div>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     </body>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>   </html>
>>>>
>>>> *index.html*
>>>>
>>>>   (ns edgar.handler ...)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>   (rpc/defremote ^{:remote-name :handler/heartbeat} remote-fn [arg1 &
>>>> remaining]
>>>>     "fubar" )
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>   (defroutes app-routes
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     (GET "/" []
>>>>          (ring-response/file-response "include/index.html" { :root
>>>> "public"}))
>>>>          ....
>>>>     )
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>   (def app
>>>>     (-> app-routes
>>>>         rpc/wrap-rpc
>>>>          wrap-params
>>>>         wrap-multipart-params
>>>>         handler/site))
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>   (defn -main []
>>>>     (let [port (Integer. (get (System/getenv) "PORT" "8080"))]
>>>>        (run-jetty app {:port port :join? false})))
>>>>
>>>> *handler.clj ( ... for good measure )*
>>>>
>>>>
>>>>
>>>> *B)* Next, calling those remotes seems to be a problem. In the
>>>> generated main.js file, the error "Uncaught TypeError: Cannot call
>>>> method 'call' of undefined" is produced from the line in fig.1. I
>>>> checked, and this error is i) happening before any network calls are made
>>>> and ii) coming from the bottom of the generated main.js file (see fig.2,
>>>> which is strangely similar to the generated edgar,js file).
>>>>
>>>>
>>>>
>>>>  shoreleave.remotes.protocols._**data_str["_"] = function(t) {
>>>> return[cljs.core.str(goog.Uri.**QueryData.createFromMap(new
>>>> goog.structs.Map(shoreleave.**remotes.common.clj__GT_js.*call***(null,
>>>> t))))].join("")
>>>> };
>>>>
>>>>  fig.1
>>>>
>>>> ...
>>>> goog.provide("edgar");
>>>> goog.require("cljs.core");
>>>> goog.require("shoreleave.remot**es.http_rpc");
>>>> goog.require("clojure.browser.**repl");
>>>> shoreleave.remotes.http_rpc.re**mote_callback.call(null, "\ufdd0'
>>>> handler/heartbeat", cljs.core.PersistentVector.fro**mArray(["heartbeat"],
>>>> true), function(p1__5971_SHARP_) {
>>>>  return alert(p1__5971_SHARP_)
>>>> });
>>>>
>>>> fig.2
>>>>
>>>>
>>>>
>>>>
>>>> Any insights on these? Thanks in advance
>>>>
>>>>
>>>> Tim Washington
>>>> Interruptsoftware.ca
>>>>
>>>> No 6: "I'm not a number. I'M A FREE MAN!!!"
>>>> No 2: "HA HA HA HA HAAAAAAA"
>>>>
>>>> -- The Prisoner
>>>>
>>>
>>>
>>  --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to