【问题标题】:Heroku ephemeral storage, Sendgrid, and attachmentsHeroku 临时存储、Sendgrid 和附件
【发布时间】:2013-08-22 21:33:44
【问题描述】:

有时我需要向我网站的用户发送带有附件的电子邮件。我正在使用 SendGrid 和 python-sendgrid 0.1.4 进行发送。电子邮件发送通过 Redis 排队。

问题来了——我应该把附件放在哪里,附件是当前作为网络进程的一部分生成的?我尝试将它放在 /tmp 中,但它不起作用 - 大概是因为当 web 进程关闭时文件被删除并且当工作进程到来时不再可用?我尝试了 /app/media,但也没有用——我想是因为 /app/media 是只读的(但奇怪的是,我在尝试写入此目录时没有收到任何错误)?

我认为答案可能是我必须重构我的代码以在发送电子邮件的同一过程中生成附件,但由于这是一个非常重要的重构,我想我会先询问社区。谢谢!

【问题讨论】:

    标签: django heroku email-attachments sendgrid


    【解决方案1】:

    Heroku 的/tmp 目录是unique to each dyno。因此,您的 Web Dyno 将文件保存在其 /tmp 目录中,然后您的工作人员在 /tmp 目录中查找并找不到它。

    最好的选择可能是重构您的代码(这样您就不会阻塞 Web Dyno 的资源创建和写入文件到磁盘)。但是,如果您真的想避免这种情况,您可以将文件临时存储在 S3 [tutorial] 或其他一些外部存储机制上。

    【讨论】:

    • 谢谢。是的,我将 S3 用于所有静态资产。我只是希望避免这里的网络开销......更不用说重构了。但似乎有必要以一种或另一种方式。叹。谢谢!
    • 如果您真的担心网络开销,建议您查看client side direct uploads to S3 上的文章。
    【解决方案2】:

    您总是需要使用外部存储(例如 S3)来存储需要对每个服务器实例/dyno 可用的文件。 有趣的是,如果您不想永远存储这些附件。您可以将生命周期事件附加到 S3 存储桶,如果文件超过 x 天,它将自动删除文件。

    【讨论】:

    • 是的,这就是我处理 S3 资产和过期 JS/CSS 文件的旧版本的方式。曾希望避免这里的网络开销,但我想这是不可避免的。感谢您的建议。
    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 2019-03-06
    • 2012-09-16
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多