Jeffrey Horner
2012-Jan-11 22:20 UTC
[R-pkgs] Rook: software and specification for R web applications and servers
Dear ?useRs, Rook version 1.0-3 has been submitted to CRAN. In the mean time you can get it here: https://github.com/jeffreyhorner/rRack/blob/master/Rook_1.0-3.tar.gz The latest release contains support for deployment with rApache. Please see 3.6.5 and 3.6.6 under section 'Configuring rApache' in the manual: http://www.rapache.net/manual.html#Configuring_rapache What is Rook? A package that does three things: - It provides a way to run R web applications on your desktop with the new internal R web server named Rhttpd. Please see the Rhttpd help page. - It provides a set of reference classes you can use to write you R web applications. The following help pages provide more information: Brewery, Builder, File, Middleware, Redirect, Request, Response, Static, URLMap, and Utils. Also see the example web applications located in 'system("exampleApps",package="Rook")'. - It provides a specification for writing your R web applications to work on any web server that supports the Rook specification. You may not see the need for web applications written in R, but consider using Rook to build a statistical engine that complements a front-end web system, or consider creating elegant ggplot2 graphics on-demand from a fresh data stream. Also, consider creating dynamic instructional content for the classroom. If you have other examples or ideas, please join in the discussion on R-help or here: http://groups.google.com/group/rrook -- Jeffrey Horner
Peter K
2014-Jun-26 16:32 UTC
[R] [R-pkgs] Rook: software and specification for R web applications and servers
Rook apps can be run using the httpd built into R (great feature!), and can be deployed using rApache server. For those who prefer to deploy the apps under FastRWeb, below is the code to do so: -- in your web.R/myrookapp.R file, we ran the Rook app instance (stored in variable app): run <- function( ... ) { run_rook_app(app); } -- somewhere from code/rserve.R source the following definitions: library(Rook) run_rook_app <- function(app,env=build_rook_env(request)) { res <- app$call(env); if (inherits(res,'try-error')){ warning('App returned try-error object') str(res) return(paste("ERROR!",res,capture.output(traceback()))) } ctype <- res$headers$`Content-Type`; res$headers$`Content-Type` <- NULL; headers <- unlist(lapply(names(res$headers),function(nam) paste(nam,": ",res$headers[[nam]],sep=""))) if (!is.null(names(res$body)) && names(res$body)[1] == 'file'){ # send fille return(WebResult(cmd="file",payload=res$body[1],content.type=ctype,headers=headers)) } else { if ((is.character(res$body) && nchar(res$body)>0)) { # plain text response return(WebResult(cmd="html",payload=res$body,content.type=ctype,headers=headers)) } else if (is.raw(res$body) && length(res$body)>0) { return(WebResult(cmd="raw",payload=res$body,content.type=ctype,headers=headers)) } } } run_rook_app <- function(app,env=build_rook_env(request)) { res <- app$call(env); if (inherits(res,'try-error')){ warning('App returned try-error object') str(res) return(paste("ERROR!",res,capture.output(traceback()))) } ctype <- res$headers$`Content-Type`; res$headers$`Content-Type` <- NULL; headers <- unlist(lapply(names(res$headers),function(nam) paste(nam,": ",res$headers[[nam]],sep=""))) if (!is.null(names(res$body)) && names(res$body)[1] == 'file'){ # send fille #print("multipart file response") return(WebResult(cmd="file",payload=res$body[1],content.type=ctype,headers=headers)) #sendBin(readBin(res$body[1],'raw',n=file.info(res$body[1])$size)) } else { if ((is.character(res$body) && nchar(res$body)>0)) { # plain text response #print("plaint text response") return(WebResult(cmd="html",payload=res$body,content.type=ctype,headers=headers)) } else if (is.raw(res$body) && length(res$body)>0) { #print("raw response") return(WebResult(cmd="raw",payload=res$body,content.type=ctype,headers=headers)) } } } .FastRWebInputStream <- setRefClass( '.FastRWebInputStream', fields=c('con','body'), methods = list( initialize = function(request) { body <<- request$body; if(!is.null(body) && is.raw(body)) { con <<- rawConnection(request$body) } else { con <<- NULL; } }, read_lines = function(n = -1L){ if (n<=0 || is.null(body) || is.null(con)) return(character()) readLines(con,n=n,warn=FALSE) }, read = function(l = -1L){ if (is.null(body) || is.null(con)) return(character()) body; }, rewind = function(){ if(!is.null(body) && is.raw(body)) con <<- rawConnection(body) }) ) -peter. On Wednesday, January 11, 2012 5:20:04 PM UTC-5, Jeffrey Horner wrote:> > Dear useRs, > > Rook version 1.0-3 has been submitted to CRAN. In the mean time you > can get it here: > > https://github.com/jeffreyhorner/rRack/blob/master/Rook_1.0-3.tar.gz > > The latest release contains support for deployment with rApache. Please see > 3.6.5 and 3.6.6 under section 'Configuring rApache' in the manual: > > http://www.rapache.net/manual.html#Configuring_rapache > > What is Rook? A package that does three things: > > - It provides a way to run R web applications on your desktop with the > new internal R web server named Rhttpd. Please see the Rhttpd help page. > > - It provides a set of reference classes you can use to write you R > web applications. The following help pages provide more information: > Brewery, Builder, File, Middleware, Redirect, Request, Response, Static, > URLMap, and Utils. Also see the example web applications located in > 'system("exampleApps",package="Rook")'. > > - It provides a specification for writing your R web applications to > work on any web server that supports the Rook specification. > > You may not see the need for web applications written in R, but consider > using Rook to build a statistical engine that complements a front-end > web system, or consider creating elegant ggplot2 graphics on-demand from > a fresh data stream. Also, consider creating dynamic instructional content > for the classroom. > > If you have other examples or ideas, please join in the discussion on > R-help or here: > > http://groups.google.com/group/rrook > > -- > Jeffrey Horner > > _______________________________________________ > R-packages mailing list > R-pac... at r-project.org <javascript:> > https://stat.ethz.ch/mailman/listinfo/r-packages > > ______________________________________________ > R-h... at r-project.org <javascript:> mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > >
Apparently Analagous Threads
- Rook: software and specification for R web applications and servers
- Rook: software and specification for R web applications and servers
- Rook: software and specification for R web applications and servers
- concurrent requests (Rook, but I think the question is more general)
- paths and Rook problems only in OSX CRAN binary package?