CI 为 OpenCPU 编写了一个 R 包,想在我自己的云服务器上使用它。即使包本身被识别并且可以更新,我也无法访问任何功能,并且我可以通过 POST 和 GET 通常访问其他(非自定义,例如基本或统计)包。
我已经安装了自定义包以及所有依赖项,/usr/local/lib/R/site-library
并且可以在服务器上本地使用 R 会话中的函数。
> TestConnectivity
function (x = 100)
{
return(sum(rnorm(x)))
}
<environment: namespace:MyPkg>
> TestConnectivity()
[1] 4.174071
该函数已正确导出(使用 roxygen2 的文档):
> getNamespaceExports("MyPkg")
[1] "TestConnectivity"
但是当我通过 OpenCPU(通过浏览器或 curl)访问它时/ocpu/library/MyPkg/R/TestConnectivity
,我得到:
object 'TestConnectivity' not found
In call:
get(reqobject, paste("package", reqpackage, sep = ":"), inherits = FALSE)
/ocpu/library/MyPkg/R/
也是空白的(通常需要导出函数的列表),但包本身可以通过浏览器在以下位置看到/ocpu/library/MyPkg/
:
Information on package 'MyPkg'
Description:
Package: MyPkg
Description: in development ...
Type: Package
Version: 0.1.2
[...]
Index:
TestConnectivity Test Connectivity of OpenCPU
MyPkg Provide R analysis of stored data.
MyPkg-package Calculation package
我已将其名称添加到 中的预加载字段中/etc/opencpu/server.conf
,但/ocpu/info
仅显示为loaded via a namespace (and not attached): [n] MyPkg_0.1.2
. 我不知道,如果这有问题。
我还添加了对软件包功能所需的所有文件的访问权限/etc/apparmor.d/opencpu.d/custom
,例如用于 ODBC 数据库连接的 DSN 配置文件。
包本身不仅包含函数,还包含组装R6
和S3
类定义(单个文件中的继承)——TestConnectivity()
尽管如此,它们都没有在 . 函数也并不总是放置在与函数名称完全相同的文件中 - 有时多个文件组合在一个文件中。(TestConnectivity()
放在相应的TestConnectivity.R
文件中 - 如果重要的话。)
与在本地使用包相比,使用 OpenCPU 时文件结构是否存在一些限制,这可能会导致此问题?或者类定义文件可能是造成问题的原因?任何建议表示赞赏。