2

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

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

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

4

2 回答 2

2

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

于 2013-08-22T23:55:44.237 回答
2

Heroku 的/tmp目录对于每个 dyno 都是唯一的。因此,您的 Web Dyno 在其/tmp目录中保存了一个文件,然后您的工作人员在 /tmp目录中查找但找不到它。

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

于 2013-08-22T23:42:06.467 回答