Skip to content

Allow manual specification of application dependencies #199

@maxheld83

Description

@maxheld83

UPDATE

This is now a simple feature request: support DESCRIPTION files as a way to specify dependencies for rsconnect::AppDeploy().


After some deployment grief with #197, I am looking for a simpler / more robust way to tell shinyapps.io about its required dependencies, and I was hoping a DESCRIPTION would do it.

But when I add a DESCRIPTION like the below to the manifest, the deploy fails:

Package: accio
Title: Accio Web Frontend for Pensieve
Author: Maximilian Held
AuthorUrl: http://www.maxheld.de
License: Proprietary
DisplayMode: Showcase
Type: Package
Imports:
  pensieve
Remotes:
  maxheld83/pensieve
----- Deployment log started at  2017-08-21 13:04:17  -----
Deploy command: 
 rsconnect::deployApp(appDir = "~/GitHub/pensieve/inst/accio",      appFileManifest = "/var/folders/dn/1kkm6bgs7c38dfm943_1gmmh0000gn/T/3654-efab-0bd8-7a0b",      account = "maxheld83", server = "shinyapps.io", appName = "accio",      appTitle = "accio", launch.browser = function(url) {         message("Deployment completed: ", url)     }, lint = FALSE, metadata = list(asMultiple = FALSE, asStatic = FALSE,          ignoredFiles = ".git|LICENSE|README.md"), logLevel = "verbose") 

Session information: 
R version 3.4.1 (2017-06-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Sierra 10.12.6

Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.1  rsconnect_0.8.4
Cookies: 
[1] "None"
GET /v1/applications/?filter=account_id:23594&filter=name:accio&count=100&offset=0 1047ms
----- Bundle upload started at  2017-08-21 13:04:18  -----
10: tryCatchOne(expr, names, parentenv, handlers[[1L]])
9: tryCatchList(expr, classes, parentenv, handlers)
8: tryCatch({
       performPackratSnapshot(bundleDir)
   }, error = function(e) {
       e$msg <- paste0("----- Error snapshotting dependencies (Packrat) -----\n", 
           e$msg)
       if (isTRUE(getOption("rsconnect.error.trace"))) {
           traceback(3, sys.calls())
       }
       stop(e)
   })
7: addPackratSnapshot(appDir, implicit_dependencies)
6: snapshotDependencies(appDir, inferDependencies(appMode, hasParameters))
5: createAppManifest(bundleDir, appMode, contentCategory, hasParameters, 
       appPrimaryDoc, assetTypeName, users)
4: bundleApp(target$appName, appDir, appFiles, appPrimaryDoc, assetTypeName, 
       contentCategory)
3: force(code)
2: withStatus(paste0("Uploading bundle for ", assetTypeName, ": ", 
       application$id), {
       bundlePath <- bundleApp(target$appName, appDir, appFiles, 
           appPrimaryDoc, assetTypeName, contentCategory)
       if (isShinyapps(accountDetails)) {
           bundleSize <- file.info(bundlePath)$size
           checkSum <- digest::digest(bundlePath, "md5", file = TRUE)
           bundle <- client$createBundle(application$id, "application/x-tar", 
               bundleSize, checkSum)
           if (!uploadBundle(bundle, bundleSize, bundlePath)) {
               stop("Could not upload file.")
           }
           response <- client$updateBundleStatus(bundle$id, status = "ready")
           bundle <- client$getBundle(bundle$id)
       }
       else {
           bundle <- client$uploadApplication(application$id, bundlePath)
       }
   })
1: rsconnect::deployApp(appDir = "~/GitHub/pensieve/inst/accio", 
       appFileManifest = "/var/folders/dn/1kkm6bgs7c38dfm943_1gmmh0000gn/T/3654-efab-0bd8-7a0b", 
       account = "maxheld83", server = "shinyapps.io", appName = "accio", 
       appTitle = "accio", launch.browser = function(url) {
           message("Deployment completed: ", url)
       }, lint = FALSE, metadata = list(asMultiple = FALSE, asStatic = FALSE, 
           ignoredFiles = ".git|LICENSE|README.md"), logLevel = "verbose")
----- Deployment error -----
Error: Unable to retrieve package records for the following packages:
- 'pensieve'
 
----- Error stack trace -----
12: stop(e)
11: value[[3L]](cond)
10: tryCatchOne(expr, names, parentenv, handlers[[1L]])
9: tryCatchList(expr, classes, parentenv, handlers)
8: tryCatch({
       performPackratSnapshot(bundleDir)
   }, error = function(e) {
       e$msg <- paste0("----- Error snapshotting dependencies (Packrat) -----\n", 
           e$msg)
       if (isTRUE(getOption("rsconnect.error.trace"))) {
           traceback(3, sys.calls())
       }
       stop(e)
   })
7: addPackratSnapshot(appDir, implicit_dependencies)
6: snapshotDependencies(appDir, inferDependencies(appMode, hasParameters))
5: createAppManifest(bundleDir, appMode, contentCategory, hasParameters, 
       appPrimaryDoc, assetTypeName, users)
4: bundleApp(target$appName, appDir, appFiles, appPrimaryDoc, assetTypeName, 
       contentCategory)
3: force(code)
2: withStatus(paste0("Uploading bundle for ", assetTypeName, ": ", 
       application$id), {
       bundlePath <- bundleApp(target$appName, appDir, appFiles, 
           appPrimaryDoc, assetTypeName, contentCategory)
       if (isShinyapps(accountDetails)) {
           bundleSize <- file.info(bundlePath)$size
           checkSum <- digest::digest(bundlePath, "md5", file = TRUE)
           bundle <- client$createBundle(application$id, "application/x-tar", 
               bundleSize, checkSum)
           if (!uploadBundle(bundle, bundleSize, bundlePath)) {
               stop("Could not upload file.")
           }
           response <- client$updateBundleStatus(bundle$id, status = "ready")
           bundle <- client$getBundle(bundle$id)
       }
       else {
           bundle <- client$uploadApplication(application$id, bundlePath)
       }
   })
1: rsconnect::deployApp(appDir = "~/GitHub/pensieve/inst/accio", 
       appFileManifest = "/var/folders/dn/1kkm6bgs7c38dfm943_1gmmh0000gn/T/3654-efab-0bd8-7a0b", 
       account = "maxheld83", server = "shinyapps.io", appName = "accio", 
       appTitle = "accio", launch.browser = function(url) {
           message("Deployment completed: ", url)
       }, lint = FALSE, metadata = list(asMultiple = FALSE, asStatic = FALSE, 
           ignoredFiles = ".git|LICENSE|README.md"), logLevel = "verbose")
Error: Unable to retrieve package records for the following packages:
- 'pensieve'
In addition: Warning messages:
1: In FUN(X[[i]], ...) :
  Package 'pensieve' not available in repository or locally
2: In FUN(X[[i]], ...) :
  Failed to infer source for package 'pensieve'; using latest available version on CRAN instead
Execution halted

Is this generally a supported way to specify dependencies, and if so, what am I doing wrong?
If not, could this be supported?

To be clear, this is kind of the inverse of #192; I want rsconnect to ignore dark packrat magic and just adhere to the DESCRIPTION.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions