Итак, у меня есть 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)
}