如何 运行 ruby shell 脚本显示一些信息,然后要求输入并进入后台?
How to run a ruby shell script that shows some information, then asks for input and goes background?
我有一个 ruby shell 脚本,我想 运行 在后台运行。
但是,在进入后台之前,我需要请求用户输入。
可能吗?如何实现?
提前致谢!
绝对有可能,我的理解是将非必要的功能推送到后台作业,以减轻用户体验的一些处理负担。我现在正在按照这些思路做一些事情,但没有被用户激活。
我想你必须先问一些问题:这个过程是否实时给用户反馈(不是后台工作的好用例)?一个人可以同时担任 运行 多少份工作?它将如何干扰或操作生产工人(如 unicorn spawn)?如果后台作业失败会怎样?他们正在处理高优先级信息吗?这些问题引导我弄清楚利用什么 how/when 来监控,以及我是否希望它由用户输入触发、启动时触发、等等。
无论如何,我建议使用:http://sidekiq.org/ , It seems to be winner amongst a lot of developers. I would probably implement it by accepting the parameters in the controller and instantiating the worker class (as you can see in sidekiqs documentation) inside a controller method. That worker class will run your ruby shell script probably with Runner like the question here? Runner in Ruby on Rails
您甚至可以通过模型触发它们(例如在创建用户后发送电子邮件)或您有什么办法。
另一个经常使用的 gem 是 https://github.com/collectiveidea/delayed_job . I am personally using https://github.com/javan/whenever 用于在部署到生产环境时激活 rake 任务(作为 cron 作业)。不过那似乎与你不太相关。
对于这种广泛性质的未来问题,您应该提供更多关于工作要求的信息,例如回答第二段中的一些问题。你有什么用?参数是否触发不同的脚本?您使用的 rails 版本是什么?它是用于生产还是开发?
这是一个简单的例子:
def do_stuff(input)
puts "Input received: #{input}"
sleep 10
end
print "Enter input value: "
input = gets
pid = fork { do_stuff(input) }
puts "test.rb started, pid: #{pid}"
Process.detach pid
注意使用 fork
启动新进程,使用 detach
允许子进程在主进程退出时继续 运行。
某些平台 (Windows) 不支持 fork
。
我有一个 ruby shell 脚本,我想 运行 在后台运行。 但是,在进入后台之前,我需要请求用户输入。
可能吗?如何实现?
提前致谢!
绝对有可能,我的理解是将非必要的功能推送到后台作业,以减轻用户体验的一些处理负担。我现在正在按照这些思路做一些事情,但没有被用户激活。
我想你必须先问一些问题:这个过程是否实时给用户反馈(不是后台工作的好用例)?一个人可以同时担任 运行 多少份工作?它将如何干扰或操作生产工人(如 unicorn spawn)?如果后台作业失败会怎样?他们正在处理高优先级信息吗?这些问题引导我弄清楚利用什么 how/when 来监控,以及我是否希望它由用户输入触发、启动时触发、等等。
无论如何,我建议使用:http://sidekiq.org/ , It seems to be winner amongst a lot of developers. I would probably implement it by accepting the parameters in the controller and instantiating the worker class (as you can see in sidekiqs documentation) inside a controller method. That worker class will run your ruby shell script probably with Runner like the question here? Runner in Ruby on Rails
您甚至可以通过模型触发它们(例如在创建用户后发送电子邮件)或您有什么办法。
另一个经常使用的 gem 是 https://github.com/collectiveidea/delayed_job . I am personally using https://github.com/javan/whenever 用于在部署到生产环境时激活 rake 任务(作为 cron 作业)。不过那似乎与你不太相关。
对于这种广泛性质的未来问题,您应该提供更多关于工作要求的信息,例如回答第二段中的一些问题。你有什么用?参数是否触发不同的脚本?您使用的 rails 版本是什么?它是用于生产还是开发?
这是一个简单的例子:
def do_stuff(input)
puts "Input received: #{input}"
sleep 10
end
print "Enter input value: "
input = gets
pid = fork { do_stuff(input) }
puts "test.rb started, pid: #{pid}"
Process.detach pid
注意使用 fork
启动新进程,使用 detach
允许子进程在主进程退出时继续 运行。
某些平台 (Windows) 不支持 fork
。