2010-03-26 58 views
0

我需要通过命名管道读取和写入一些数据。在Rails中使用命名管道

我已经在一个简单的Ruby应用程序中测试过它,它工作的很好。

但我不知道,我应该把它放在我的Rails应用程序中?我听说过Rake任务,但我不确定,这是否正确。

我需要打开一个管道文件并监听数据。如果有的话,我需要处理它并进行DB查询。然后,将一些数据写入另一个管道。我知道,它是如何工作的,但唯一的问题 - 如何使用Rails运行它?请给我一些例子。

回答

1

这听起来像你有一个网站,将有一个后端数据源,你是通过管道流。这听起来似乎不会成为HTTP请求/响应周期的一部分,这可能会使耙子任务成为一个不错的选择。

请在LIB /任务一个名为listener.rake

它应该是这样的:

desc 'Listens to pipe and does stuff' 
task :listen_to_pipe => :environment do 
    puts "Listen to Pipe starting" 
    #open pipe 
    #loop to listen to it 
    puts "going to do stuff" 
    #do stuff 
    #end 
end 

然后,在命令行中的项目的根目录,你可以调用它像这样的:

rake listen_to_pipe 

和不同的环境中,做到这一点:

rake listen_to_pipe RAILS_ENV=production 

此任务将可以访问您的所有模型。要结束它,请按Ctrl + C

请记住,您需要停止&重新启动进程以加载对模型所做的任何更改。

+0

谢谢你,它的工作=)。一些问题: 1.有没有办法使用rails应用程序自动加载这个任务? 2.当用户点击我网站上的链接时(例如),我需要将数据发送到管道。我可以使用全局变量,但我认为它是个坏主意。 – FancyDancy

+0

我没有任何方法可以在没有批处理脚本的情况下同时启动它们。另外,从webapp进入管道似乎很奇怪。如果管道任务在数据库上运行,则可以跳过控制器中的该步骤并直接在数据库上运行。或者你可以在数据库中添加任务轮询的内容。 – Tilendor

+0

例如,用户点击链接“写入CD”,然后Rails使用命名管道将“写入”发送到另一个应用程序。 我可以做一个全局变量然后发送它,但它是一个正确的方式? – FancyDancy