无法在远程服务器上使用 RestRserve 开发 API
Cannot deveolop API using RestRserve on remote server
考虑到我已经按照下面的示例构建了我的应用程序:
library(RestRserve)
app = Application$new()
app$add_get(
path = "/hello",
FUN = function(request, response) {
response$set_body("Hello from RestRserve")
})
backend = BackendRserve$new()
backend$start(app, http_port = 8080)
使用最后一条命令,Rserve 唤醒并正确侦听并响应端口 8080 上的请求。
现在,我想将上面的命令放在远程服务器上的脚本中,用 Rscript 启动它,并让它永远监听。但是,一旦我与 ssh 断开连接,它就会停止工作。
难道我做错了什么?
请注意,我只安装了 RestRserve,Rserve 作为依赖项出现,但我没有更改任何内容或自定义任何配置文件。
查看源代码,我建议将命名参数 background=TRUE
添加到 backend$start(app, http_port = 8080)
。此参数默认为 FALSE (line 36), when TRUE Rserve will be started in a new detached R-session (line 93)。 (顺便说一句,省略所述参数,您可以通过保持第二个 SSH 连接打开并使用过滤器列出 运行 进程来检查断开连接是否会杀死您的 运行 R 会话:ps aux | grep bin/exec/R
之前和断开后)
如果使用所述参数有效,您可能还需要查看服务器重启。从它的外观来看,我想说 RestRserve 实际上无法自行处理,您可能需要一个小的服务脚本。
我在 rexy.ai 和 karo 的帮助下解决了:
正确的脚本使用 backend$start(app, http_port = 8080)
(没有后台选项),但部署是使用 nohup Rscript app.R &
进行的。这让应用程序 运行 远程接受请求!
考虑到我已经按照下面的示例构建了我的应用程序:
library(RestRserve)
app = Application$new()
app$add_get(
path = "/hello",
FUN = function(request, response) {
response$set_body("Hello from RestRserve")
})
backend = BackendRserve$new()
backend$start(app, http_port = 8080)
使用最后一条命令,Rserve 唤醒并正确侦听并响应端口 8080 上的请求。 现在,我想将上面的命令放在远程服务器上的脚本中,用 Rscript 启动它,并让它永远监听。但是,一旦我与 ssh 断开连接,它就会停止工作。 难道我做错了什么? 请注意,我只安装了 RestRserve,Rserve 作为依赖项出现,但我没有更改任何内容或自定义任何配置文件。
查看源代码,我建议将命名参数 background=TRUE
添加到 backend$start(app, http_port = 8080)
。此参数默认为 FALSE (line 36), when TRUE Rserve will be started in a new detached R-session (line 93)。 (顺便说一句,省略所述参数,您可以通过保持第二个 SSH 连接打开并使用过滤器列出 运行 进程来检查断开连接是否会杀死您的 运行 R 会话:ps aux | grep bin/exec/R
之前和断开后)
如果使用所述参数有效,您可能还需要查看服务器重启。从它的外观来看,我想说 RestRserve 实际上无法自行处理,您可能需要一个小的服务脚本。
我在 rexy.ai 和 karo 的帮助下解决了:
正确的脚本使用 backend$start(app, http_port = 8080)
(没有后台选项),但部署是使用 nohup Rscript app.R &
进行的。这让应用程序 运行 远程接受请求!