【发布时间】:2018-04-24 06:42:29
【问题描述】:
我编写了一个闪亮的应用程序,它可以在我的本地机器上完美运行。我使用 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 复制到项目目录并指向它。当我这样做时,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)
同样,我将文件“db2jcc4.jar”复制到我的本地项目目录中。如果我在本地机器上指向该文件的本地项目目录,程序就可以工作。但是,当我在 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
【问题讨论】:
-
编辑您的问题以显示致命错误详细信息。此外,Db2 jdbc 驱动程序需要两个文件来与 Unix/Linux/Windows 版本的 Db2 通信。另一个文件是 db2jcc_license_cu.jar。
-
尊敬的先生,当我使用我的应用程序目录中的这个文件时,程序中止。此外,在 Shiny Server 中,程序中止。
-
问题解决了。感谢先生的耐心和帮助。我运行了这个命令:sudo R CMD javareconf。然后我运行 install.packages("rJava")。然后我注释掉了包含 dyn.load() 的行。最后,我将 db2jcc4.jar 移到了一个子目录中。现在,应用程序完美运行。
标签: r shiny db2 ibm-cloud rjdbc