Ruby Tempfile 不在磁盘上创建文件

Ast*_*en2 6 ruby temporary-files

我目前正在 Ruby 上运行此代码。

file = Tempfile.new(['tempemail', '.html'])
file << email # Email is a Ruby String (not nil)

Launchy.open(file.path)
Run Code Online (Sandbox Code Playgroud)

Launchy 抱怨该文件不存在。我已经运行 cat 并确认了这一点。有没有办法强制 Ruby 将 Tempfile 保存到磁盘?

编辑:

我做了一项额外的测试。我在 Launchy.open 之前添加了 file.rewind 和 file.read。该文件成功包含电子邮件的内容。

knu*_*nut 5

你能尝试一下吗file.close

不使用 Launchy 进行测试:

require 'tempfile'
file = Tempfile.new(['tempemail', '.html'])
file << 'xx' # Email is a Ruby String (not nil)

file.close #<- This is needed

p File.read(file.path) # -> 'xx'
Run Code Online (Sandbox Code Playgroud)

如果没有,file.close你会得到一个空字符串。

如果继续将数据写入文件,close您也可以使用:flush

require 'tempfile'
file = Tempfile.new(['tempemail', '.html'])
file << "xx\n" # Email is a Ruby String (not nil)

p file.path
file.flush

file << "yy\n" # Email is a Ruby String (not nil)
file.flush

p File.read(file.path)
Run Code Online (Sandbox Code Playgroud)