使用存储在OpenCPU服务器上的输出文件作为后续函数调用的输入

时间:2012-10-01 18:55:38

标签: opencpu

问题:如何使用存储在OpenCPU服务器上的输出文件作为其他功能的输入?

背景 我正在尝试在openCPU中使用knitrmarkdown来生成html,我可以用它来更新网页,其中包含有关页面加载的统计信息。

基本工作流程如下:

  1. 生成.Rmd文件,在本地存储。
  2. 访问使用AJAX将.Rmd文件上传到服务器上的OpenCPU实例的网页。
  3. 通过openCPU使用knit功能将该功能转换为存储在服务器上的* .md文件。
  4. 对存储在服务器上的文件使用markdownToHTML函数(通过调用knit调用生成的相应哈希值)并接收包含生成的HTML的AJAX回复。
  5. 使用新HTML更新网页。
  6. 目前,我已经完成了第4步的过程。我可以通过表单请求POST调用knit传入.Rmd文件,我收到OpenCPU的以下回复:

    {
    "object" : "xa9eaea44e1",
    "graphs" : [
        "xf31dcfe7f3"
    ],
    "files" : {
        "figure" : "xfc55396fd8",
        "test.md" : "x7821c69f79"
    }
    }
    

    其中"test.md"是通过knit函数生成的输出文件。现在,我尝试使用哈希(在本例中为"x7821c69f79",使用以下参数POST /R/pub/markdown/markdownToHTML/ascii

    file     /R/tmp/x7821c69f79/bin
    

    这会返回HTTP 400错误,并显示以下消息:

    cannot open URL 'http://localhost/R/store/R/tmp/x7821c69f79/bin/rds'
    

    但是,当我向/R/tmp/x7821c69f79/bin发出GET请求时,会返回test.md的内容。所以我知道在knit的调用中正确存储了文件。

    那么,这里发生了什么?换句话说,如何使用存储在OpenCPU服务器上的输出文件作为另一个函数的输入?

1 个答案:

答案 0 :(得分:2)

Hmz /store错误看起来像个错误,我会调查一下。

也许在第3步中,您可以让函数返回test.md的内容,例如以return(readLines(test.md))结尾?或者更好的是,不要输出到test.md而是输出到tmpfile()并返回其内容。这样输出存储为存储中的R对象,而不是原始文件,您只需传递参数,例如:步骤4中file=x7821c69f79

你看过markdown example app了吗?请参阅来源herehere