Есть ли механизм сохранения/записи данных из запросов на сервер OpenCPU?

Во-первых, я понимаю, что есть много веских причин НЕ делать этого, но для интереса мой вопрос: существует ли рекомендуемый (или допустимый) метод для сохранения информации из http-запроса в сеанс R, на котором работает сервер?

Например, триггер во внешней системе запускает HTTP-запрос при обновлении, который содержит основную информацию (время обновления). Каков наилучший способ сделать эту (теперь обновленную) временную переменную доступной в R?

В качестве примера ниже я попытался использовать ..\identity API для записи простого файла .csv. Я получил результат, который не выглядел сбоем, но файл не был создан (и я согласен, что это хорошо по умолчанию), но я хотел бы понять, возможно ли обновить состояние на другом на стороне сервера (т. е. где угодно, кроме хранилища объектов \tmp), даже если (например) потребуется использовать и установить специальный пакет?

Извиняюсь, если это где-то задокументировано, но когда я щелкнул ссылку на руководство администратора https://raw.github.com/jeroenooms/opencpu/opencpu-0.7/manual/document.pdf, я получил 404

Спасибо.

require(opencpu)
#Loading required package: opencpu
#Initiating OpenCPU server...
#OpenCPU started.
#[httpuv] http://localhost:8810/ocpu
#OpenCPU single-user server ready.

require(RCurl)

# no problem getting data
getForm("http://localhost:8810/ocpu/library/datasets/R/mtcars/print")

# ... returns data

# or querying with the identity function
postForm("http://localhost:8810/ocpu/library/base/R/identity/print",x="mtcars[1,]")
# [1] "          mpg cyl disp  hp drat   wt  qsec vs am gear carb\r\nMazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4\r\n"


# but if I try a 'write' function...
postForm("http://localhost:8810/ocpu/library/base/R/identity/print",x="write.csv(matrix(1:10,2),file='test2.csv')")
# I get a NULL return (but no failure)
#[1] "NULL\r\n"
#attr(,"Content-Type")
#charset 
#"text/plain"      "utf-8"

person Troy    schedule 28.01.2014    source источник


Ответы (1)


Вся информация, включая последнее руководство в формате PDF, доступна на OpenCPU.org. В частности, страница о библиотеке JavaScript имеет глава о состоянии.

Что вам нужно сделать, удалите /print и выполните функцию POST. Результатом будет HTTP 201 с ключом к созданным ресурсам (файл в вашем случае) в заголовке Location ответа.

> library(httr)
> req <- POST("http://localhost:1659/ocpu/library/base/R/matrix", body=list(data="1:10", nrow="2"))
> req
Response [http://localhost:1659/ocpu/library/base/R/matrix]
  Status: 201
  Content-type: text/plain; charset=utf-8
/ocpu/tmp/x0975a128/R/.val
/ocpu/tmp/x0975a128/stdout
/ocpu/tmp/x0975a128/source
/ocpu/tmp/x0975a128/console
/ocpu/tmp/x0975a128/info

> req$headers$location
[1] "/ocpu/tmp/x0975a128/"

> req$headers["x-ocpu-session"]
$`x-ocpu-session`
[1] "x0975a128"
person Jeroen    schedule 28.01.2014
comment
спасибо - на самом деле документы JS очень полезны, и я думаю, что понимаю состояние сеанса как сохраненное в /tmp. Еще один вопрос - существует ли какая-либо концепция приложения в отличие от состояния сеанса в opencpu? КСТАТИ отличная работа! - person Troy; 29.01.2014
comment
PS для информации, неработающая ссылка была на этой странице ‹opencpu.at.biovel.eu/ страницы/download.html›. - person Troy; 29.01.2014
comment
О, они используют очень старую версию. Как вы попали на эту страницу? - person Jeroen; 29.01.2014