如何在没有先保存文本文件的情况下在Ruby中进行FTP

由于Heroku不允许将动态文件保存到磁盘,我遇到了一个两难的境地,我希望你能帮我克服。 我有一个可以在RAM中创建的文本文件。 问题是我找不到允许我将文件流式传输到另一个FTP服务器的gem或函数。 我正在使用的Net / FTP gem需要先将文件保存到磁盘。 有什么建议?

ftp = Net::FTP.new(domain) ftp.passive = true ftp.login(username, password) ftp.chdir(path_on_server) ftp.puttextfile(path_to_web_file) ftp.close 

ftp.puttextfile函数是需要物理文件存在的函数。

StringIO.new提供了一个像打开文件一样的对象。 通过使用StringIO对象而不是文件来创建像puttextfile这样的方法很容易。

 require 'net/ftp' require 'stringio' class Net::FTP def puttextcontent(content, remotefile, &block) f = StringIO.new(content) begin storlines("STOR " + remotefile, f, &block) ensure f.close end end end file_content = < Hello! Hello.  filecontent ftp = Net::FTP.new(domain) ftp.passive = true ftp.login(username, password) ftp.chdir(path_on_server) ftp.puttextcontent(file_content, path_to_web_file) ftp.close 

Heroku的大卫迅速回复了我进入那里的支持票。

您可以使用APP_ROOT / tmp进行临时文件输出。 在单个请求的生命周期内,无法保证在此目录中创建的文件的存在,但它应该适用于您的目的。

希望这有帮助,大卫