有时我需要向我网站的用户发送带附件的电子邮件。我正在使用SendGrid和python-sendgrid 0.1.4来发送。电子邮件发送通过Redis排队。
这是问题 - 我在哪里放置附件,这是当前作为Web过程的一部分生成的?我尝试将它/ tmp放入,这不起作用 - 可能是因为当Web进程关闭时文件被删除,并且当工作进程到来时不再可用?我试过/ app / media,这也没用 - 我认为因为/ app / media是只读的(但奇怪的是,我没有尝试写入这个目录时出错)?
我认为答案可能是我必须重构我的代码以在发送电子邮件的同一过程中生成附件,但由于这是一个非常重要的重构,我想我先问社区。谢谢!
答案 0 :(得分:2)
Heroku的/tmp
目录为unique to each dyno。因此,您的Web Dyno将文件保存在其/tmp
目录中,然后您的工作人员在其 /tmp
目录中查找并找不到该文件。
最好的选择可能是重构你的代码(这样你就不会堵塞你的Web Dyno创建和写入文件到磁盘的资源)。但是,如果您真的想避免它,可以将文件临时存储在S3 [tutorial]或其他一些外部存储机制上。
答案 1 :(得分:2)
您始终需要使用外部存储(例如S3)来存储需要对每个服务器实例/ dyno可用的文件。 有趣的是,如果你不想永远存储这些附件。您可以将生命周期事件附加到S3存储桶,如果文件早于x天,则会自动删除该文件。