【问题标题】:Store file in directory tmp on heroku Rails将文件存储在 heroku Rails 上的目录 tmp 中
【发布时间】:2013-09-04 08:46:27
【问题描述】:

在我的延迟作业中,我尝试创建一个文件到 tmp 文件夹

file_path = Rails.root.join('tmp', "#{file_name}." + file_extension);
exported_file = kit.to_pdf
# Save file to disk
File.open(file_path, 'wb') do |file|
      file << exported_file 
end

它在本地运行良好,但在 Heroku 上延迟作业出现错误 “没有这样的文件或目录 - /app/tmp/test.pdf”

那么我该如何解决这个问题。我不想将文件存储在 S3 中。 谢谢

【问题讨论】:

    标签: ruby-on-rails file heroku delayed-job tmp


    【解决方案1】:

    Heroku 使用所谓的ephemeral filesystem。这意味着您的本地文件系统只能由单个测功机访问,并且一旦测功机停止、重新启动或移动,本地文件系统上的所有文件都将被销毁。

    延迟作业进程将文件传输到外部进程的唯一方法是将文件存储在更永久的位置。这可能是 S3、数据库、Rackspace 文件等,但对于 Heroku,它不能是本地文件系统。

    但是,如果您只是想将文件存储在临时暂存位置,则可以使用本地文件系统。看起来您可能遇到了问题,因为 /app/tmp 目录可能不存在。

    尝试将此添加到您的工作人员:

    Dir.mkdir(Rails.root.join('tmp'))
    

    或者,将tmp 目录添加到您的 git 存储库。

    mkdir tmp
    touch tmp/.keep
    git add tmp/.keep
    git commit -m "Add tmp directory to app repository."
    

    【讨论】:

    • 谢谢,我会存储在s3中
    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2019-12-18
    相关资源
    最近更新 更多