World: r4wp
[Rebol School] REBOL School
older newer | first last |
Sujoy 10-Oct-2012 [1202x6] | hi everyone. as usual, i need some help. i'm trying to use Doc's uniserve+taskmaster engine |
i read on altme that i should be using the version from the cheyenne sources | |
so i copied the files over to a new directory, then when i try >> do %uni-engine.r >> uniserve/boot ...i get a bunch of errors saying cheyenne is not defined using the old (0.99) sources on the softinnov website, i can use the starter.r script just fine. However, i set up a simple service and a module to process tasks, but get: ** Script Error: Cannot use path on none! value ** Where: process-task ** Near: if shared/pool-max > shared/pool-count [ fork if verbose > 0 [log/info "launching new process"] ] | |
the service is a simple test: install-service [ name: 'test port-id: 9000 module: 'my-module on-load: func[] [ do %scheduler.r scheduler/plan [every 10 s do my-func] scheduler/wait ] on-task-done: func[data] [print data] my-func: func[][ data: load datafile foreach [key value] data [ shared/do-task [value] self ] ] ] | |
the module: install-module [ name: 'my-module on-task-received: func[data][ response: rejoin["got" data] ] ] | |
i'm probably being totally obtuse...any help greatly appreciated | |
DocKimbel 10-Oct-2012 [1208x2] | Hi Sujoy, glad you're using Uniserve. You should use the latest version from Cheyenne. Some services or client protocols might be dependent on Cheyenne, so the best thing to do is move them out of %services/ and %protocols/ folder and leave only your own ones. Also by default, the task hander module should go in a %UniServe/handlers/ folder. |
Also, you need to set the UniServe path variable before loading it: uniserve-path: <path-to-your-uniserve-folder> | |
Sujoy 10-Oct-2012 [1210] | Thanks for getting back to me on this Doc... So if i have this correct, I should: 1. Use the latest version from Cheyenne (have made a copy) 2. Remove all services and protocols from the %services/ and %protocols/ folders, except for task-master.r (which i need!) 3. Now hopelessly confused - the UniServe directory tree of the latest Cheyenne version I have is as follows: Uniserve ---clients ---libs ---protocols ---services ---task-master.r ---task-master ---task-handler.r I don't see a %UniServe/handlers folder... |
DocKimbel 10-Oct-2012 [1211] | You have to add it back, it has been moved to %cheyenne/ folder. |
Sujoy 10-Oct-2012 [1212] | ah - ok. i was trying to create a %MODULES folder give me a minute... |
DocKimbel 10-Oct-2012 [1213] | After removing all unnecessary UniServe plugins, this sequence works for me: uniserve-path: %//dev/cheyenne-server/uniserve/ do uniserve-path/uni-engine.r uniserve/boot |
Sujoy 10-Oct-2012 [1214x3] | uniserve/boot works fine after these steps, but... ** Script Error: Cannot use path on none! value ** Where: process-task ** Near: if any [ zero? shared/pool-max shared/pool-max > shared/pool-count ] [fork] either |
(am on windows) | |
am using the same test i put into altme for the service and module... | |
DocKimbel 10-Oct-2012 [1217] | Can you send me a zip of your Uniserve folder so I can test that locally? |
Sujoy 10-Oct-2012 [1218x3] | sure |
unfortunately, i dont have permissions to send files over altme. :( how else can i send? email? | |
have sent you a mail at nr at red-lang dot org | |
DocKimbel 10-Oct-2012 [1221] | Ok, from the UniServe folder, this code works: uniserve-path: %./ do %uni-engine.r uniserve/boot I had to change your absolute path in %reminder.r to: - line 11: do uniserve-path/libs/scheduler.r - line 24: feeds: load uniserve-path/docs/feeds.r |
Sujoy 10-Oct-2012 [1222x2] | trying this right now... |
damn! no luck. >> ls BSD-License.txt change-log.txt clients/ docs/ handlers/ libs/ protocols/ services/ uni-engine.r >> uniserve-path: %./ == %./ >> do %uni-engine.r Script: "UniServe kernel" (17-Jan-2010) Script: "Encap virtual filesystem" (21-Sep-2009) == true >> uniserve/boot booya . http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/business/rss.xml ** Script Error: Cannot use path on none! value ** Where: process-task ** Near: if any [ zero? shared/pool-max shared/pool-max > shared/pool-count ] [fork] either | |
DocKimbel 10-Oct-2012 [1224] | Ah, I stopped at "booya". :-) |
Sujoy 10-Oct-2012 [1225x2] | :) is this because pool-list is empty? i put in a debug "print" cmd in the on-new-client function of task-master.r, which is the only place i could see pool-list being appended to...but it seems the function is not called |
on-new-client: has [job][ ;added this line print client/remote-ip if client/remote-ip <> 127.0.0.1 [close-client exit] set-modes client [keep-alive: on] client/timeout: 15 client/user-data: make task [] ;only place where pool-list is appended to... append pool-list :client | |
DocKimbel 10-Oct-2012 [1227] | No the issue is with 'shared being reset to 'none in %task-master...looks like a regression in Uniserve when working on standalone...I'm looking into it. |
Sujoy 10-Oct-2012 [1228] | thanks doc! |
DocKimbel 10-Oct-2012 [1229] | In %reminder.r, you shouldn't use: scheduler/wait. Uniserve is already providing an event loop. You need to remove that line. |
Sujoy 10-Oct-2012 [1230x2] | ok... |
removed the scheduler/wait line...now: uniserve-path: %./ == %./ >> do %uni-engine.r Script: "UniServe kernel" (17-Jan-2010) Script: "Encap virtual filesystem" (21-Sep-2009) == true >> uniserve/boot booya ** Script Error: Invalid path value: server-ports ** Where: reform ** Near: mold any [uniserve/shared/server-ports port-id] >> | |
DocKimbel 10-Oct-2012 [1232] | I've just pushed a fix for that to Cheyenne SVN repo on Google code. |
Sujoy 10-Oct-2012 [1233] | thanks doc...downloading now... |
DocKimbel 10-Oct-2012 [1234] | From that, it seems to work until the job event is raised, then the server crashes (not sure if it's your code, scheduler or Uniserve that causes that). |
Sujoy 10-Oct-2012 [1235x3] | :( i'm actually trying to do something really simple i have a bunch of feeds i want to download i can do that sequentially (foreach feed feeds [...]), but thought it best to us background worker processes via task-master to download instead is there an alternative? |
or a better way of writing this using uniserve? | |
this is what i get with the latest from googlecode: uniserve-path: %./ == %./ >> do %uni-engine.r Script: "UniServe kernel" (17-Jan-2010) Script: "Encap virtual filesystem" (21-Sep-2009) == true >> uniserve/boot booya 10/10-18:37:48.883-## Error in [uniserve] : Cannot open server reminder on port 9000 ! 10/10-18:37:48.884-## Error in [uniserve] : Cannot open server task-master on port 9799 ! == none >> | |
DocKimbel 10-Oct-2012 [1238x2] | Uniserve task-master is mainly meant for server-side parallel request processing. For your need, you should use an async HTTP client rather, which would be a much simpler solution. |
Cannot open... you need to close any previous Uniserve session. | |
Sujoy 10-Oct-2012 [1240] | sorry - just killed all previous Uniserve sessions. now get: uniserve-path: %./ == %./ >> do %uni-engine.r Script: "UniServe kernel" (17-Jan-2010) Script: "Encap virtual filesystem" (21-Sep-2009) == true >> uniserve/boot booya ** Script Error: Invalid path value: conf-file ** Where: on-started ** Near: if all [ uniserve/shared file: uniserve/shared/conf-file ] [ append worker-args reform [" -cf" mold file] ] >> |
DocKimbel 10-Oct-2012 [1241] | Are you running from SVN repo, or a copy of Uniserve folder? |
Sujoy 10-Oct-2012 [1242] | a copy of the Uniserve folder... |
DocKimbel 10-Oct-2012 [1243x2] | This looks like Cheyenne-dependent code... |
But, you should *really* use a async HTTP client, that's the best solution for your need (multiple HTTP downloads at the same time). | |
Sujoy 10-Oct-2012 [1245x2] | hmmm. ok...will work on this and get back to you thanks for the time Doc |
(cant wait to see Cheyenne on Red ;) | |
DocKimbel 10-Oct-2012 [1247] | Well, you might see some micro-Cheyenne before Christmas. ;-) |
Sujoy 10-Oct-2012 [1248x4] | best christmas ever! |
just to persist with using uniserve...i think something i may be getting there uniserve-path: %./ == %./ >> do %uni-engine.r Script: "UniServe kernel" (17-Jan-2010) Script: "Encap virtual filesystem" (21-Sep-2009) == true >> uniserve/boot booya 127.0.0.1 127.0.0.1 == none >> i commented out the lines from on-started: on-started: has [file][ worker-args: reform [ "-worker" mold any [in uniserve/shared 'server-ports port-id] ;TBD: fix shared object issues ] if not encap? [ append worker-args reform [" -up" mold uniserve-path] if value? 'modules-path [ append worker-args reform [" -mp" mold modules-path] ] if all [ uniserve/shared ;file: uniserve/shared/conf-file ][ ;append worker-args reform [" -cf" mold file] ] ] if integer? shared/pool-start [loop shared/pool-start [fork]] ] ...since conf-file is cheyenne specific i think maybe the scheduler is killing UniServe - it exits while returning none... | |
nope - the scheduler is just fine... i'm now thinking it may have to do with using the shared/do-task in the on-load function... | |
nope will take doc's advice and do something simpler | |
older newer | first last |