2014-01-28 1 views
1

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

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

В качестве примера ниже я попытался использовать API ..\identity, чтобы написать простой 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" 

ответ

1

Вся информация, включая новейшее руководство по PDF, доступна на сайте OpenCPU.org. В частности, страница о JavaScript library имеет chapter on state.

Что вам нужно сделать, удалите /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" 
+0

спасибо - на самом деле документы JS очень полезны, и я думаю, что понимаю состояние сеанса, которое сохраняется в/tmp. Еще один вопрос - есть ли какая-либо концепция приложения в отличие от состояния сеанса в opencpu? BTW отличная работа! – Troy

+0

PS для информации, неработающая ссылка была на этой странице . – Troy

+0

О, они работают очень старая версия. Как вы попали на эту страницу? – Jeroen

 Смежные вопросы

  • Нет связанных вопросов^_^