我写了一个Shiny App,它在我的本地机器上完美运行。我使用RJDBC连接到IBM Cloud中的DB2数据库。代码如下。
#Load RJDBC
dyn.load('/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/lib/server/libjvm.dylib')
# dyn.load('/Users/parthamajumdar/Documents/Solutions/PriceIndex/libjvm.dylib')
library(rJava)
library(RJDBC)
由于路径是硬编码的,我将文件libjvm.dylib复制到Project目录并指向它。当我这样做时,R会发出致命的错误。
我删除绝对路径并替换为" ./ libjvm.dylib"并在ShinyApp.io网站上部署了该应用程序。当我运行该程序时,它会产生致命的错误。
#Values for you database connection
dsn_driver = "com.ibm.db2.jcc.DB2Driver"
dsn_database = "BLUDB" # e.g. "BLUDB"
dsn_hostname = "dashdb-entry-yp-lon02-01.services.eu-gb.bluemix.net" # e.g. replace <yourhostname> with your hostname, e.g., "Db2 Warehouse01.datascientstworkbench.com"
dsn_port = "50000" # e.g. "50000"
dsn_protocol = "TCPIP" # i.e. "TCPIP"
dsn_uid = "<UID>" # e.g. userid
dsn_pwd = "<PWD>" # e.g. password
#Connect to the Database
#jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "/Users/parthamajumdar/lift-cli/lib/db2jcc4.jar");
jcc = JDBC("com.ibm.db2.jcc.DB2Driver", "db2jcc4.jar");
jdbc_path = paste("jdbc:db2://", dsn_hostname, ":", dsn_port, "/", dsn_database, sep="");
conn = dbConnect(jcc, jdbc_path, user=dsn_uid, password=dsn_pwd)
同样,我复制了文件&#34; db2jcc4.jar&#34;到我的本地项目目录。如果我在本地计算机中指向此文件的本地项目目录,则该程序可以正常运行。但是,当我在ShinyApp.io上部署时,它会产生致命的错误。
请求您告诉我我需要做什么,以便应用程序在ShinyApp.io网站上正常运行。
当我从Shiny服务器运行应用程序时,错误如下:
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
date
Loading required package: nlme
This is mgcv 1.8-23. For overview type 'help("mgcv-package")'.
Error in value[[3L]](cond) :
unable to load shared object '/srv/connect/apps/ExpenseAnalysis/Drivers/libjvm.dylib':
/srv/connect/apps/ExpenseAnalysis/Drivers/libjvm.dylib: invalid ELF header
Calls: local ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
答案 0 :(得分:0)
对我来说有用的是以下内容,它独立于操作系统。
创建您自己的R包,其中包含extdata
文件夹中所需的文件。例如,您的包可以是yourpackage
,文件类似于extdata/drivers/mydriver.lib
。通常,这将存储在此位置inst/extdata/drivers
。有关详细信息,请参阅http://r-pkgs.had.co.nz/inst.html。
将此软件包存储在github上,如果您需要隐私,则需要了解如何授予访问令牌。
使用devtools
包进行安装。命令就是这样,devtools::install_github("you/yourpackage", auth_token = "youraccesstoken")
。在部署到Shiny.io之前执行此操作一次。确保您也library(yourpackage)
。包提交过程将确定它需要从Github获取。
使用以下R代码查找文件。
system.file('extdata/drivers/mydriver.lib, package='yourpackage')
。这将为您提供文件的完整路径,您可以使用它。