django - Heroku 临时存储、Sendgrid 和附件

标签 django heroku email-attachments sendgrid

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

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

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

最佳答案

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

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

关于django - Heroku 临时存储、Sendgrid 和附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391207/

相关文章:

heroku - Heroku 与 Postgres 上的 ConnectionTimeoutError

ruby-on-rails-3 - 从 Rails 3.2.x 中的 SendGrid 接收带有附件的电子邮件

python - 如何使用 apache 设置 django 以便我的应用程序位于根 url 处?

python - django如何异步执行函数,即将任务移交给子进程并返回响应

django - heroku上的gunicorn : binding to localhost

javascript - 如何让 Codeship 通过 Heroku 上的 NodeJS ExpressJS 部署的 check_url 阶段?

Python 网络框架 - 除了 Django

django - 如何在 django-rest-framework 中单元测试权限?

android - 为什么我不能在 Android N+ 中附加文件?

node.js - 通过 aws ses 在 node.js 中发送带有附件的邮件