CI написал пакет R для OpenCPU и хочет использовать его на своем собственном облачном сервере. Я не могу получить доступ к каким-либо функциям, даже если сам пакет распознан и может быть обновлен, и я могу получить доступ к другим (нестандартным, например, базовым или статистическим) пакетам, как обычно, через 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
, например. файлы конфигурации DSN для подключения к базе данных ODBC.
Сам пакет состоит не только из функций, но и из собранных определений классов R6
и S3
(наследование в отдельных файлах) - тем не менее, ни один из них не используется в TestConnectivity()
. Функции также не всегда помещаются в файлы с точно таким же названием, как и функция, а иногда несколько объединены в одном файле. (TestConnectivity()
помещается в соответствующий файл TestConnectivity.R
— если это имеет значение.)
Существуют ли какие-либо ограничения в отношении файловой структуры при использовании OpenCPU в отличие от локального использования пакета, что может вызвать эту проблему? Или могут быть причиной проблемы файлы определения класса? Любые предложения приветствуются.