Пользовательский пакет R в OpenCPU / пакет найден, но функции не видны
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 в отличие от локального использования пакета, что может вызвать эту проблему? Или файлы определения классов могут быть причиной проблемы? Любые предложения приветствуются.
1 ответ
Спасибо за ответ (и отличная работа над OpenCPU, кстати...)!
Я решил свою проблему, просто установив пакет в /home/myUser/R/3.1/library
например, .libPaths()[1]
(или же R-LIBS-USER[1]
) вместо /usr/local/lib/R/site-library
,
Я добился этого, постепенно создавая все более и более сложный тестовый пакет... и в тот момент, когда у меня была почти структура моего реального проекта, он все еще работал. Единственным отличием был путь установки.
В общем, это, вероятно, проблема с управлением правами на моей виртуальной машине, а не с OpenCPU или моим пакетом. Мне жаль, что я не могу предоставить больше информации - если я наткнусь на что-то, я добавлю это здесь.
РЕДАКТИРОВАТЬ - я забыл: Конечно, URL меняется с /ocpu/library/MyPkg/R/
в /ocpu/user/MyUsername/library/MyPkg/R/
,