将filewatcher作为单独的进程运行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将filewatcher作为单独的进程运行相关的知识,希望对你有一定的参考价值。
我还是Ruby的新手,所以我希望你能提供帮助。我有一个Ruby on Rails应用程序需要观看特定目录“Dir A”,我一直在添加txt文件。一旦出现新文件,它需要被处理成csv文件,然后在连接到用户之前出现在tmp目录中,并在文件进入ActiveStorage后从tmp中消失,同时将原始txt文件保留在“Dir A”中在有限的时间内。
现在,我使用filewatcher gem来观看“Dir A”,但我需要它在服务器启动时运行并继续在后台运行。我知道我需要守护进程,但是如何从* .rb文件而不是终端执行呢? Atm我正在使用Threads,但我不确定这是否是最好的解决方案......
我还有以下问题: - 如何处理服务器启动前已经出现在文件夹中的文件? - filewatcher似乎没有拿到另一个新文件,而它仍在处理前一个文件,并且线程似乎没有帮助 - 你建议什么是跟踪已处理文件的最佳方法 - 数据库,或者将文件重命名/复制到不同的文件夹,或某些全局变量,或者还有其他的东西?我必须知道处理了哪些文件,因此在我需要安排filewatcher重启时由于其性能下降而不特别重复该过程(filewatcher文档声明如果它长时间运行,最好重新启动该进程)
我很抱歉有问题,但我需要一些指导,也许有一个我错过的更好的宝石,我看了看卫星宝石,但我不完全确定它是如何工作的,filewatcher似乎更简单。
这个问题应该分为两个,一个是关于运行filewatcher
作为后台进程,另一个是关于管理已处理文件,但就filewatcher
而言,一个简单的解决方案是将foreman
gem与Procfile一起使用。
您可以在一个进程中启动Rails应用程序,使用应用程序根目录中的Procfile启动另一个进程中的filewatcher,如下所示:
# Procfile
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
filewatcher: filewatcher "**/*.txt" "bundle exec rake process_txt_files"
并将需要处理的任何处理移动到rake任务中。有了这个,您可以在本地运行foreman start
来启动这两个进程,如果您的生产服务器支持Procfiles(例如Heroku),这样可以很容易地在生产中执行相同操作。
以上是关于将filewatcher作为单独的进程运行的主要内容,如果未能解决你的问题,请参考以下文章
WPF App.OnStartup() 在写入文件和 FileWatcher 时崩溃
java 简单的代码片段,展示如何将javaagent附加到运行JVM进程