As was the case for PHP and Python, we create a file in the "/etc/httpd/conf.d" directory with configuration information. We will name this "rapache.conf" and start out with the following text:
LoadModule R_module /etc/httpd/modules/mod_R.so ROutputErrors <Location /RApacheInfo> SetHandler r-info </Location> <Directory /var/www/html/rscripts> SetHandler r-script RHandler sys.source </Directory> <Directory /var/www/html/brew> SetHandler r-script RHandler brew::brew </Directory>
The "LibModule" statement tells Apache to load the "mod_R.so" shared library and associate it with the "R_module" set of directives.
The "ROutputErrors" statement indicates that R errors should be displayed in the brower.
The "Location" statement creates a location "RApacheInfo" that displays information about the running rapache module. We can test that rapache has loaded and is running correctly by browsing to the link:
The first "Directory" statement indicates that all files in the "rscripts" subdirectory will be processed by the "sys.source()" function. This will execute the file as an R script.
The second "Directory" statement indicates that all files in the "brew" subdirectory will be processed by the "brew" function that is in the "brew" package. This function takes a file containing a mix of HTML and R code, executes the R code, and places the results within the HTML that is returned. This is analogous to the mixture of HTML and code in PHP and PSP.
Hello World: R Script
We can test the "R Script" handling with some simple code that generates HTML. This code also uses the "setContentType" function to indicate that the result should be treated as HTML, and finishes with the "DONE" statement indicating the script has finished without error.
setContentType("text/html") cat("<HTML><BODY><H1>") cat("Hello from R!") cat("</H1></BODY></HTML>") DONE
If we save this to the file "test.R" in "/var/www/html/rscripts" we will see "Hello from R!" displayed in the Header 1 font when we browse to:
Hello World: Brew
Instead of writing out all of the HTML directly with "cat()" commands, we can create an "rhtml" file containing a mix of R and HTML. This then gets processed by the "brew" function to create the HTML response.
As an example, we create the file "test.rhtml" in "/var/www/html/brew" containing:
<HTML> <BODY> <H1> <% cat("Hello from Brew!") %> </H1> </BODY> </HTML>
Browsing to "http://localhost/brew/test.rhtml" will display "Hello from Brew!" in the Header 1 font.
Rapache provides rich capabilities for accessing all of the information in the HTTP request from within R, and for setting information as part of the HTTP response.
It also provides ways to pass information other than HTML back as the response, and can even support the uploading of files to the server as part of the client's request.
This is discussed on the Rapache manual and displayed by the examples available from the Rapache web site.