Nothing
# capture the current working directory
# set the package search path to the app specific library
appwd <- getwd()
applibpath <- file.path(appwd, "library")
message("library path:\n", paste("...", applibpath, "\n"))
message("working path:\n", paste("...", appwd, "\n"))
message("interactive R session:\n", paste("...", interactive(), "\n"))
# Load functions to ensure software dependencies and check the internet
source("utils/ensure.R")
# Create app/library if it doesn't exist (e.g. first run)
# Initialize RInno
if (!dir.exists(applibpath)) {
pb <- winProgressBar(
title = "Starting RInno ...",
label = "Initializing ...")
dir.create(applibpath)
init_pkgs <- c("jsonlite")
for (i in seq_along(init_pkgs)) {
setWinProgressBar(pb, value = i / (length(init_pkgs) + 1),
label = sprintf("Loading package - %s", init_pkgs[i]))
pkg <- list.files(appwd, paste0(init_pkgs[i], ".*zip$"), full.names = TRUE, recursive = TRUE)
install.packages(pkgs = pkg, lib = applibpath, repos = NULL, type = "win.binary")
}
close(pb)
}
# Add app/library to R's library search path
.libPaths(c(applibpath, .libPaths()))
# Read the application config
library("jsonlite", character.only = TRUE)
config <- jsonlite::fromJSON(file.path(appwd, "utils/config.cfg"))
# Package dependency list
pkgs_loc <- config$pkgs$pkgs_loc; pkgs_names <- config$pkgs$pkgs_names
# Provide some initial status updates
pb <- winProgressBar(
title = sprintf("Starting %s ...", config$appname),
label = "Initializing ...")
# Use tryCatch to display error messages in config$logging$filename
appexit_msg <- tryCatch({
# ensure all package dependencies are installed
message("ensuring packages: ", paste(pkgs_names, collapse = ", "))
setWinProgressBar(pb, 0, label = "Ensuring package dependencies ...")
ensure(pkgs_loc)
for (i in seq_along(pkgs_names)) {
setWinProgressBar(pb,
value = i / (length(pkgs_names) + 1),
label = sprintf("Loading package - %s", pkgs_names[i]))
library(pkgs_names[i], character.only = TRUE)
}
# If an app repository has been provided, install the app from there
if (config$app_repo[[1]] != "none") {
source("utils/get_app_from_app_url.R")
}
setWinProgressBar(pb, 1.00, label = "Starting application")
close(pb)
# Start the app
source(file.path(appwd, "utils/launch_app.R"))
"application terminated normally"
},
error = function(e) {
msg <- sprintf("Startup failed with error(s):\n\n%s", e$message)
tcltk::tk_messageBox(
type = "ok",
message = msg,
icon = "error")
msg
},
finally = {
close(pb)
})
message(appexit_msg)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.