在public / with rails中更改文件时更新数据库

时间:2014-07-21 13:11:20

标签: ruby-on-rails ruby guard watch

我希望能够在修改public /中的文件时更新我的​​数据库。 rails app使用旧系统推送的文件,我们需要更新内部数据库。

这是可能的,我该怎么办?我检查了警卫,但它是否可用于生产?还有更好的选择吗?也许我可以使用dnotify,但我想保留我的项目中的所有内容,而且都是红宝石,没有外部程序。

谢谢:P

1 个答案:

答案 0 :(得分:1)

Guard使用名为listen的gem来实现通用通知和与各种OS模块的接口。

听取支持:

  • Linux via rb-inotify
  • 达尔文通过rb-fsevent
  • Windows via wdm(mingw,not cygwin)
  • BSD(sortof)通过rb-kqueue
  • 通过Ruby每秒轮询文件系统是后退选项。

模块基本上都是薄的胶合代码,允许访问底层的OS通知系统调用。如果需要,您可以直接编写一个特定于操作系统的模块,但是当有人给您一个通用接口时,为什么会这样?

听起来很简单:

listener = Listen.to('dir/path/to/listen') do |modified, added, removed|
   puts "mod: #{modified}" if modified
   puts "add: #{added}"    if added
   puts "rem: #{removed}"  if removed
end
listener.start

如果您对FFI / C模块有疑虑或问题,可以在更高的时间间隔内使用轮询

options = {
  force_polling: true,
  latency:       30 
}

然后将代码与daemons-rails

的rails应用程序一起集成