【问题标题】:Files in public directory in Rails - Errno::ENOENT (No such file or directory @ rb_sysopenRails 中公共目录中的文件 - Errno::ENOENT(没有这样的文件或目录 @ rb_sysopen
【发布时间】:2019-06-24 06:25:06
【问题描述】:

我目前正在使用 combine pdf gem 开发 Rails 5.2 应用程序。我正在尝试合并两个 PDF 文件,但不知何故我无法从 public 目录加载文件。

在控制器中我有以下方法:

def pdf_download
  pdf = CombinePDF.new
  pdf << CombinePDF.load("#{Rails.root}/public/pdfs/1.pdf") 
  pdf << CombinePDF.load("#{Rails.root}/public/pdfs/1.pdf")
  pdf.save "combined.pdf"

  send_data combined_file.to_pdf, filename: "combined.pdf", type: "application/pdf"
end

我在 StackOverflow 上尝试了很多帖子,但都没有成功,例如使用 Rails.root。但我仍然得到同样的错误:

Errno::ENOENT (No such file or directory @ rb_sysopen - app/public/pdfs/1.pdf):

要从public 加载文件,我需要做任何额外的配置吗?如果这些 PDF 不应该在 public 中,我应该将它们存储在哪里?

【问题讨论】:

  • 为什么一个例子以#{Rails.root}/开头而另一个以./开头?你的实际代码是什么?这些文件实际存在于哪里?
  • 您编写的代码与错误消息中的代码明显不同。能否请您验证您运行的是哪个版本的代码,并显示相应的错误(如果有!)
  • 如果这些 PDF 不应该公开,我应该将它们存储在哪里?答案是您可以在 amazon s3 上上传您的文件,并且可以使用活动存储
  • @tom-lord 我很抱歉我错误地上传了错误的图片。但是,我通过了这个问题,但想知道是否有更优化的解决方案。请随时对答案发表评论。

标签: ruby-on-rails ruby pdf controller


【解决方案1】:

这为我解决了问题:

  def pdf_download
    pdf = CombinePDF.new
    pdf << CombinePDF.load(Rails.root.join("public", "pdfs/1.pdf").to_s)
    pdf << CombinePDF.load(Rails.root.join("public", "pdfs/2.pdf").to_s)
    # pdf.save "combined.pdf"

    send_data pdf.to_pdf, filename: "combined.pdf", type: "application/pdf"
  end

【讨论】:

    【解决方案2】:

    这为我解决了问题:

    pdf << CombinePDF.load("./public/pdfs/1.pdf")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2018-05-01
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2020-02-22
      相关资源
      最近更新 更多