通过网页远程启动 ruby 脚本
remotely launching a ruby script via a webpage
我在网络上有 3 台机器(实际上更多,但为了这个问题的目的是 3 台)、2 个工作站和一台服务器。服务器托管一个 Rails 应用程序,工作站 A 上的用户可以访问该应用程序,这使他们可以查看和分析服务器数据库中的数据。我在工作站 B 上也有一个 Ruby 脚本生成数据并存储到服务器上的数据库中。我希望 Rails 应用程序能够在 A 上的用户单击 Rails 应用程序页面上的某个按钮时在工作站 B 上启动该 Ruby 脚本,以便 1.我的系统尽可能多地包含在应用程序中,并且 2. 我可以避免必须通过远程桌面进行连接,甚至更糟糕的是,物理上去工作站 B。
我真的不知道如何在最基本的层面上解决这个问题;我过去曾使用 PSExec 远程启动进程,但我不知道该工具是否适用于此应用程序。如果是的话,我无法想象如何将它用于该目的。有人能给我指出正确的方向吗?
有许多不同的方法可以从 ruby-- system
, exec
, backticks, open3. They're all slightly different depending on how you want to interact with it exactly-- 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 请求,确保您已获得授权,如果需要很长时间 运行 并且您不希望人们经常按下按钮等
我在网络上有 3 台机器(实际上更多,但为了这个问题的目的是 3 台)、2 个工作站和一台服务器。服务器托管一个 Rails 应用程序,工作站 A 上的用户可以访问该应用程序,这使他们可以查看和分析服务器数据库中的数据。我在工作站 B 上也有一个 Ruby 脚本生成数据并存储到服务器上的数据库中。我希望 Rails 应用程序能够在 A 上的用户单击 Rails 应用程序页面上的某个按钮时在工作站 B 上启动该 Ruby 脚本,以便 1.我的系统尽可能多地包含在应用程序中,并且 2. 我可以避免必须通过远程桌面进行连接,甚至更糟糕的是,物理上去工作站 B。
我真的不知道如何在最基本的层面上解决这个问题;我过去曾使用 PSExec 远程启动进程,但我不知道该工具是否适用于此应用程序。如果是的话,我无法想象如何将它用于该目的。有人能给我指出正确的方向吗?
有许多不同的方法可以从 ruby-- system
, exec
, backticks, open3. They're all slightly different depending on how you want to interact with it exactly-- 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 请求,确保您已获得授权,如果需要很长时间 运行 并且您不希望人们经常按下按钮等