在我的Ruby on Rails应用程序中,我有一个例程写入文件(通过java应用程序),然后读取写入的文件。
write_to_file(file.path, data)
read_file(file.path)
大部分时间这都很好。但有时看起来文件写入没有发生,但也没有错误。当我用相同的数据重试例程时,它每次都有效。
我已经开始考虑文件写入是否异步发生,并且在将数据写入磁盘之前实际读取了文件。这有可能吗?
write_to_file
通过负责编写的套接字连接调用java应用程序。 Java应用程序将一个简单的json字符串返回给Rails。
答案 0 :(得分:3)
这个问题确实是" Java代码做了什么?"并不是一个真正的Ruby问题。它甚至不是一个真正的Java问题,因为Java语言允许(当然)任何类型的实现。
在文件可供读取之前,Java代码肯定会返回。我们不知道。它可能是将请求发布到队列,然后返回,例如。
您需要查看Java代码。如果你不想打扰它,你总是可以这样做:
sleep 0.01 until File.readable?(file.path)
这有点粗糙,有更优雅的方法来做到这一点,但它会起作用。
答案 1 :(得分:0)
您可能遇到文件缓冲,其中少量数据未写入文件,除非它已被刷新。我不确定您在此处使用的界面,但flush
方法旨在处理这种情况。