Plumber API работает на сервере, но не тогда, когда я настраиваюсь с помощью systemd - PullRequest
3 голосов
/ 25 марта 2019

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

1 Ответ

0 голосов
/ 01 апреля 2019

Ну, я никогда этого не решал.Вместо этого я попробовал это с pm2, как подробно описано здесь https://www.rplumber.io/docs/hosting.html#pm2

Я был немного растерян зависимостью npm, выглядел как багаж, но он работает как шарм.

Так что если кто-нибудьделает Google это с аналогичной проблемой, я советую вам использовать pm2.Мне потребовалось примерно 5 минут, чтобы запустить его: -)

Я должен добавить, что хотя я еще не использовал их, я понимаю, что pm2 также создаст файлы журналов, что звучит полезно.

...