gpt4 book ai didi

ruby-on-rails - rails : How can I use system zip on Heroku to make a docx from an xml template?

转载 作者:数据小太阳 更新时间:2023-10-29 08:53:52 24 4
gpt4 key购买 nike

我在本地工作,将模板文件存储在 #{Rails.root}/tmp 中,使用 system "cd tmp/template; zip -r ../#{@ filename} *" 压缩文件,将 .docx(zip 存档)发送到 S3,然后发送到浏览器。问题是 Heroku 没有找到这些文件。在创建 xml 文件之前,我从另一个位置复制模板目录 (system "cp -R support/ser_template tmp/")。我了解 Heroku 的 read-only filesystem但我不能让 #{Process.pid} 弄乱我的文件名(Word 要求将 xml 文件命名为 document.xml)。

无论如何,我可以将模板文件存储在 Amazon 上并仍然使用 Heroku 的系统 zip 实用程序吗? RubyZip does not create proper docx archives .

编辑:这里是代码:

require 'aws/s3'

class WordDocument
include ConnectS3

def initialize(content)
connect_s3
@pid = Process.pid
@filename = "SER_" + Time.now.strftime("%Y%m%d-%H%M%S") + '.docx'
system "cp -R #{Rails.root}/support/ser_template #{temp_path}"
xml = File.open(xml_path, 'w')
xml.puts content
xml.close
system "cd #{temp_path}; zip -r #{@filename} *"
docx = File.open(temp_path + "/" + @filename, 'r')
AWS::S3::S3Object.store(s3_path, docx, @s3_credentials["bucket"], :use_virtual_directories => true)
AWS::S3::S3Object.grant_torrent_access_to s3_path, @s3_credentials["bucket"]
end

def temp_path
"#{Rails.root}/tmp/#{@pid}_ser"
end

def xml_path
temp_path + "/word/document.xml"
end

def path
"https://s3.amazonaws.com/" + @s3_credentials["bucket"] + s3_path
end

def s3_path
'/section_editor_reports/' + @filename
end
end

最佳答案

你不能在 #{Rails.root}/tmp 中创建一个名为 #{Process.pid}_docx/something_nice/ 的目录吗?将您需要的内容复制(或符号链接(symbolic link))到:

#{Rails.root}/tmp/#{Process.pid}_docx/something_nice/

然后

system "cd #{Rails.root}/tmp/#{Process.pid}_docx/; zip -r x.zip something_nice"

然后你有:

#{Rails.root}/tmp/#{Process.pid}_docx/x.zip

具有漂亮漂亮的内部结构,不包括您的 PID。

关于ruby-on-rails - rails : How can I use system zip on Heroku to make a docx from an xml template?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com