ไม่สามารถพัฒนา API โดยใช้ RestRserve บนเซิร์ฟเวอร์ระยะไกล

พิจารณาว่าฉันได้สร้างแอปพลิเคชันของฉันตามตัวอย่างด้านล่าง:

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 เป็นแบบพึ่งพา แต่ฉันไม่ได้เปลี่ยนแปลงอะไรหรือปรับแต่งไฟล์การกำหนดค่าใด ๆ


person Fabio    schedule 24.07.2020    source แหล่งที่มา


คำตอบ (2)


เมื่อดูซอร์สโค้ด ฉันขอแนะนำให้เพิ่มพารามิเตอร์ที่มีชื่อ background=TRUE ถึง backend$start(app, http_port = 8080) พารามิเตอร์นี้เป็น FALSE ตามค่าเริ่มต้น (บรรทัด 36) เมื่อ TRUE Rserve จะเริ่มใน R-session เดี่ยวใหม่ (บรรทัดที่ 93) (อย่างไรก็ตาม หากไม่มีพารามิเตอร์ดังกล่าว คุณสามารถตรวจสอบว่าการตัดการเชื่อมต่อฆ่า R-session ที่ทำงานอยู่ของคุณโดยเปิดการเชื่อมต่อ SSH ที่สองไว้และแสดงรายการกระบวนการที่กำลังทำงานอยู่พร้อมตัวกรอง: ps aux | grep bin/exec/R ก่อนและหลังการตัดการเชื่อมต่อ)

หากการใช้พารามิเตอร์ดังกล่าวใช้งานได้ คุณอาจต้องการดูการรีสตาร์ทเซิร์ฟเวอร์ด้วย จากรูปลักษณ์ภายนอก ฉันว่า RestRserve ไม่สามารถจัดการสิ่งนั้นได้ด้วยตัวเองจริงๆ และคุณอาจต้องใช้สคริปต์บริการเล็กๆ น้อยๆ

person karo    schedule 29.07.2020
comment
ขอบคุณสำหรับคำอธิบายของคุณ ฉันเพิ่ม background = TRUE แล้ว อย่างไรก็ตาม มันใช้งานไม่ได้ pid ของแอปพลิเคชันคือ 449147 แต่เมื่อฉันตรวจสอบด้วย ps aux | grep R ไม่พบ porcess นั่นอาจเป็นสิ่งที่นำมาใช้กับ RServe ได้หรือไม่? ฉันเพิ่งติดตั้งมันเป็นการพึ่งพาของ RestRserve โดยไม่ต้องกำหนดค่า - person Fabio; 31.07.2020
comment
ไม่มีสิทธิ์เข้าถึง Linux/R ล่าสุดเพียงพอที่จะทดสอบด้วยตัวเองในทันที ดีใจที่คุณสามารถจัดการได้ - person karo; 31.07.2020

ฉันแก้ไขด้วยความช่วยเหลือของ rexy.ai และ karo: สคริปต์ที่ถูกต้องใช้ backend$start(app, http_port = 8080) (โดยไม่มีตัวเลือกพื้นหลัง) แต่การปรับใช้ทำได้โดยใช้ nohup Rscript app.R & สิ่งนี้ทำให้แอปทำงานจากระยะไกลและยอมรับคำขอ!

person Fabio    schedule 31.07.2020