1

我有以下 Ruby/Rails 代码:

file = File.new("#{folder}/conf.txt", 'a+')
file.write(content)
file.close

问题是有时会创建此文件但它是空的,而我确定内容变量不为空(它也用于代码的另一部分)。

如何确定文件已写入?由于这是我的应用程序中的重要一步,如果无法编写,我想得到一个异常或某种错误。

4

2 回答 2

3

从原始数据进行往返,将其写入文件,然后从文件中读取。如果它与原始内容匹配,则可以确定。

于 2012-10-19T16:51:45.327 回答
0

感谢所有回答问题的人,并对没有引起注意,但在发布问题 1 天后,我开始在 Apache 日志中注意到这样的错误(我使用的是 Passenger + Apache):

[ pid=21526, timestamp=1350608946 ] Process aborted! signo=SIGABRT(6), reason=SI_TKILL, signal sent by PID 21526 with UID 0, backtrace available.
--------------------------------------
[ pid=21526 ] Backtrace with 34 frames:
PassengerHelperAgent[0x525668]
/lib64/libpthread.so.0(+0xf4c0)[0x7fcabb2014c0]
/lib64/libc.so.6(gsignal+0x35)[0x7fcaba7059a5]
/lib64/libc.so.6(abort+0x175)[0x7fcaba707185]
big backtrace...

我搜索了这个问题,但找不到任何有类似问题/回溯的人。

他们,我决定搬到Passenger + Nginx。

1周后,问题就消失了。过去一天发生一两次的事情,在 Nginx 中一次都没有发生。相同的代码(根本没有更新)和相同的机器。

虽然我无法重现这个问题,但在我调查它的过程中,我用“File.close”方法做了几个测试。只要无法写入文件,它就会抛出异常。

不幸的是,我没有足够的经验来研究这个问题,我对 Nginx +Passenger 相当满意。

于 2012-10-27T18:54:19.460 回答