Rails:如何在 Heroku 上使用系统 zip 从 xml 模板制作 docx?

2023-12-15

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

我是否可以将模板文件存储在 Amazon 上并仍然使用 Heroku 的系统 zip 实用程序?RubyZip 无法创建正确的 docx 档案.

编辑:这是代码:

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/?将您需要的内容复制(或符号链接)到:

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

Then

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

然后你有:

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

有一个漂亮的内部结构,不包括你的 PID。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails:如何在 Heroku 上使用系统 zip 从 xml 模板制作 docx? 的相关文章

随机推荐

  • 使 SwiftUI 矩形与另一个矩形具有相同的高度或宽度

    对于 macOS 应用程序中的 SwiftUI 布局 我有三个矩形 如下所示 生成此布局的代码是 import SwiftUI struct ContentView View var body some View VStack HStack
  • 安装laravel 5.7后是否需要执行“php artisan key:generate”命令

    我已经安装了拉拉维尔 5 7在我的系统中 我想知道是否有必要执行php artisan key generate命令 php artisan 密钥 生成 该命令设置APP KEY你的价值 env file 如果您使用 Composer 创建
  • 将一个表中的记录插入到另一个表中

    我在 Access VBA 代码中将其作为用户窗体上的单击按钮 我有两个重复的表 PrintTable 和 ManPowerCalculator 我试图将 ManPowerCalculator 表中的每个项目插入到 PrintTable 中
  • iPhone Web 应用程序的 jQuery Mobile 高度问题,假设页面高度为 480 而不是 460

    jQuery Mobile 似乎在初始化时计算页面高度 但由于我们在应用程序中启用了状态栏 JQM 假设我们有 480 像素可用 而不是 460 像素 我们正在为 iPhone 构建移动网络应用程序 我们使用 JQM 1 1 1 和 Pho
  • 如何在 Python 中将多个高斯曲线拟合到质谱数据?

    我想在 Python 中将多条高斯曲线拟合到质谱数据 现在 我一次对数据进行高斯拟合 实际上是一次一个范围 有没有更简化的方法来做到这一点 有没有办法可以通过循环运行数据以在每个峰值处绘制高斯分布 我猜一定有更好的方法 但我已经通过互联网进
  • Solr Lucene 中连字符/破折号的挑战

    我试图让 Solr 仅提取格式类似于 n nnnnnnn 的票证的第二个 7 位数字部分 原本我希望把全票保留在一起 根据文档 数字与数字应该保留在一起 但在解决这个问题一段时间并查看代码后 我认为情况并非如此 Solr 总是生成两个项 因
  • Linq - 将 GroupBy 与我自己的类型与匿名类型一起使用

    我有一个要使用 Linq 分组的对象列表 对象类型是 GroupRating 我想按它们的 Params 属性对它们进行分组 public class GroupRating public long Id get set public Pa
  • 获取加起来达到目标​​总和的元素组合

    是否可以得到a总和等于变量的列表元素sum 我尝试过迭代 如果我想从列表中获取 2 个元素 也许可以这样做 但我不知道如何获取更多元素 def function sum a h c 1 2 3 4 5 6 7 8 return f sum
  • emacs 中的 Shift 箭头选择

    我正在使用 GNU Emacs 23 2 1我的init el cua mode 1 transient mark mode 1 setq shift select mode t global linum mode 1 show paren
  • PL/SQL - 如何在 IN 子句中使用数组

    我试图在 IN 子句中使用我的过程的输入值数组作为游标的 where 子句的一部分 我知道以前有人问过这个问题 但我还没有看到如何使我的语法正确编译 在封装规范中 类型为 TYPE t brth dt IS TABLE OF sourceT
  • 在大目录中转换 XML 时出现 java.lang.OutOfMemoryError

    我想使用 XSLT2 在一个具有很多级别的巨大目录中转换 XML 文件 文件数量超过 100 万个 每个文件大小 4 至 10 kB 一段时间后 我总是收到 java lang OutOfMemoryError Java 堆空间 我的命令是
  • 将 MemoryStream 写入响应对象

    我正在使用以下代码来传输 MemoryStream 对象中的 pptx 但是当我打开它时 我在 PowerPoint 中收到修复消息 将 MemoryStream 写入响应对象的正确方法是什么 HttpResponse response H
  • 根据日期和时区计算 tm_isdst

    当我运行线路时 time strptime 2012 06 01 12 00 00 time strftime Z Y m d H M S Z 它为我创建了一个结构 但标志tm isdst是错的 六月初 DST 已生效 但无论我在哪一天输入
  • 如何在Access表中插入列描述?

    如何使用 SQL 在 Access 表中插入列的描述 I do CREATE TABLE TAB A COLUMN1 TEXT 30 COLUMN2 REAL PRIMARY KEY COLUMN1 但如何为每列插入描述 你不能用 SQL
  • 我的不和谐机器人代码正在运行,但没有响应我的命令[重复]

    这个问题在这里已经有答案了 我是一名编程大三学生 我了解 Node js 并且想编写自己的 Discord 机器人 我下面写的代码不起作用 你能帮我解决这个问题吗 const Client Intents require discord j
  • Powershell 在空文件夹上比较对象

    我正在编写一个简单的 DLL 复制脚本来帮助我的开发团队设置他们的本地环境 我检查 build devdrop 文件夹并获取 DLL 文件列表 然后 我查看本地文件夹并复制所有较新的 DLL 我的问题是当本地文件夹为空时 即脚本第一次运行
  • Scala Akka HTTP 转换参数为 java.time.ZonedDateTime

    我正在使用 Akka HTTP 在 Scala 中 开发 REST 服务 我希望将传入 http get 请求的参数转换为 ZonedDateTime 类型 如果我尝试使用 String 或 Int 但使用 ZonedDateTime 类型
  • 从 NetworkStream 读取特定数量的字节

    我正在尝试从网络流中读取已知长度的消息 我有点期待NetworkStream Read 将等待返回 直到我给它的缓冲区数组已满 如果不是 那么这样做的意义何在 ReadTimeout财产 我用来测试我的理论的示例代码 public stat
  • Haskell 打印字符串标准输出

    我需要打印 powerset 中的元素 现在我的代码的输出是这样的 a ab b x xy xyz xz y yz z 但是 我需要输出不带引号 如下所示 a ab b x xy xyz xz y yz z 这就是我所拥有的 我该如何修复它
  • Rails:如何在 Heroku 上使用系统 zip 从 xml 模板制作 docx?

    我在本地工作 将模板文件存储在 Rails root tmp using system cd tmp template zip r filename 压缩文件 将 docx zip 存档 发送到 S3 然后发送到浏览器 问题是 Heroku