管道工 API 在服务器上工作,但在我使用 systemd 设置时不工作

Plumber API works on server but not when I set up with systemd

所以我有一个 API 如果我 运行 水管工手动命令,它在本地和服务器上都可以正常工作,我的意思是在服务器中使用 ssh 和 运行宁:

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 一个有效。另一个只是说 "An exception occurred."

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.

自从我昨晚发布这篇文章后,我将整个东西部署在一个完全独立的服务器上,该服务器也是 运行ning 16.04,它在那里显示了完全相同的行为。

编辑:我也试过这个,基于管道工文档中的代码 returns 一个 pdf,还有 returns "an exception occurred"

#* @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)
}

好吧,我从来没有解决过这个问题。相反,我使用 pm2 进行了尝试,详见此处 https://www.rplumber.io/docs/hosting.html#pm2

我对 npm 的依赖有点反感,看起来像是包袱,但它很有魅力。

因此,如果有人 Google 遇到类似问题,我建议您使用 pm2。我花了大约 5 分钟才完成 运行 :-)

我应该补充一点,虽然我还没有使用过它们,但我发现 pm2 也会创建日志文件,这听起来很有用。