无法在Shinyapp.io使用RJDBC

时间:2018-04-24 06:42:30

标签: r shiny db2 ibm-cloud rjdbc

我写了一个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

1 个答案:

答案 0 :(得分:0)

对我来说有用的是以下内容,它独立于操作系统。

  1. 创建您自己的R包,其中包含extdata文件夹中所需的文件。例如,您的包可以是yourpackage,文件类似于extdata/drivers/mydriver.lib。通常,这将存储在此位置inst/extdata/drivers。有关详细信息,请参阅http://r-pkgs.had.co.nz/inst.html

  2. 将此软件包存储在github上,如果您需要隐私,则需要了解如何授予访问令牌。

  3. 使用devtools包进行安装。命令就是这样,devtools::install_github("you/yourpackage", auth_token = "youraccesstoken")。在部署到Shiny.io之前执行此操作一次。确保您也library(yourpackage)。包提交过程将确定它需要从Github获取。

  4. 使用以下R代码查找文件。 system.file('extdata/drivers/mydriver.lib, package='yourpackage')。这将为您提供文件的完整路径,您可以使用它。