因此,如果我手动运行管道工命令,我有一个可以在本地和服务器上正常工作的 API,我的意思是在服务器中进行 ssh-ing 并运行:
r <- plumb("plumber.R")
r$run(port=8000, host = "0.0.0.0")
它看起来像这样:
#* @serializer contentType list(type="application/html")
#* @get /test
function(res){
include_rmd("test.Rmd", res)
}
#* Echo the parameter that was sent in
#* @param msg The message to echo back.
#* @get /echo
function(msg=""){
list(msg = paste0("The message is: '", msg, "'"))
}
他们都可以正常工作。但是,当我使用 systemd 让它们在服务器上存活时,只有 /echo 可以工作。另一个只是说“发生了异常”。
systemd 设置如下所示:
[Unit]
Description=Plumber API
# After=postgresql
# (or mariadb, mysql, etc if you use a DB with Plumber, otherwise leave this commented)
[Service]
ExecStart=/usr/bin/Rscript -e "api <- plumber::plumb('/home/chrisbeeley/api/plumber.R'); api$run(port=8000, host='0.0.0.0')"
Restart=on-abnormal
WorkingDirectory=/home/chrisbeeley/api/
[Install]
WantedBy=multi-user.target
我在任何地方都找不到错误日志,我很困惑为什么当我在服务器上运行命令时它应该工作,但在我使用 systemd 时却不能工作。
我正在使用 Ubuntu 16.04。
自从我昨晚发布了这篇文章以来,我已经将整个事情部署在一个完全独立的服务器上,该服务器也在运行 16.04,它在那里显示了完全相同的行为。
编辑:我也试过这个,基于返回pdf的管道工文档上的代码,并且还返回“发生异常”
#* @serializer contentType list(type="text/html; charset=utf-8")
#* @get /html
function(){
tmp <- tempfile()
render("test_report.Rmd", tmp, output_format = "html_document")
readBin(tmp, "raw", n=file.info(tmp)$size)
}