我在用以下方法编写一个R包 plumber
. 主代码。
#' @title startServer
#' @description Start the api server on port `port`
#'
#' @param port Port number
#' @return none
#' @examples
#' startServer(8000)
#' @export
startServer <- function(port) {
port <- if (port == "")
port = "8000"
router_some <- plumber$new("R/some.R")
router <- plumber$new()
router$mount("/some", router_some)
router$run(host = '0.0.0.0',
port = strtoi(port),
swagger = TRUE)
}
这段代码在R控制台运行时很好用。
startServer("8000")
Running plumber API at http://0.0.0.0:8000
Loading required namespace: swagger
Running Swagger UI at http://127.0.0.1:8000/__swagger__/
但是,当我运行 check()
:
checking examples ... ERROR
Running examples in ‘...’ failed
The error most likely occurred in:
> base::assign(".ptime", proc.time(), pos = "CheckExEnv")
> ### Name: startServer
> ### Title: startServer
> ### Aliases: startServer
>
> ### ** Examples
>
> startServer(8000)
Error in .subset2(public_bind_env, "initialize")(...) :
File does not exist: R/some.R
Calls: startServer -> <Anonymous> -> <Anonymous>
Execution halted
已找不到包含路由的文件。如何指向正确的文件?
我知道我可以使用 plumber
但是,我似乎失去了一个合适的 swagger 文件生成(没有参数)。
如果你知道如何构建包,那就很简单了:在构建过程中,所有的代码实际上都是以R对象结构的形式执行和存储的。我们这里需要的是在构建时绑定路由器,并公开函数 startServer
当完成时。或者:在构建时可以执行所有的路由器逻辑。只有启动服务器(router$run
)应在 startServer
router_some <- plumber$new("R/some.R")
router <- plumber$new()
router$mount("/some", router_some)
#' @title startServer
#' @description Start the api server on port `port`
#'
#' @param port Port number
#' @return none
#' @examples
#' startServer(8000)
#' @export
startServer <- function(port) {
port <- if (port == "")
port = "8000"
router$run(host = '0.0.0.0',
port = strtoi(port),
swagger = TRUE)
}