我在网络,2个工作站和一台服务器上有3台机器(实际上更多,但就本问题而言是3台)。服务器托管一个Rails应用程序,该应用程序由Workstation A上的用户访问,允许他们查看和分析来自服务器数据库的数据。我还在Workstation B上获得了一个生成数据的Ruby脚本,存储到服务器上的数据库。我希望Rails应用程序具有在A上的用户单击Rails应用程序页面上的某个按钮时在Workstation B上启动该Ruby脚本的功能,以便1.尽可能多地将我的系统包含在应用程序中2.我可以避免通过远程桌面连接,甚至更糟糕的是,实际上去工作站B.
我真的不知道如何在基本水平上接近这个;我过去曾使用PSExec来远程启动流程,但我不知道该工具是否适用于此应用程序。如果它是我无法想象如何使用它为此目的。有人能指出我正确的方向吗?
答案 0 :(得分:1)
从ruby-- system
,exec
,backticks,open3启动子流程有很多种不同的方法。它们完全不同,具体取决于您希望如何与其进行完全互动 - this answer to a similar question contains a handy flowchart。我不确定哪个版本的Windows与哪个版本的Ruby最合适?你应该搜索这些选项和你的版本中的每一个来查找。
在rails应用程序的控制器操作中,您可以调用其中一个执行ruby脚本,例如:
require 'open3'
class WhateverController < ActionController
def start
Open3.popen3('ruby your_script.rb') {|stdin, stdout, stderr, wait_thr|
# do whatever you need to with the output streams here
}
render nothing: true # So that the request returns to the user who pushed the button
end
end
我建议你做一个POST请求,确保你有权限,可能跟踪上次有人运行这个请求,如果需要很长时间才能运行而你不想要人按下按钮等等。