是否有一种机制可以将请求中的数据持久保存/记录到OpenCPU服务器?

时间:2014-01-28 06:39:34

标签: r 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"

1 个答案:

答案 0 :(得分: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"