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.