1

我克隆了一个工作的 EC2 实例来创建一个辅助登台服务器。除了 sorl-thumbnail 之外,一切都正常工作。

在描述我收到的错误之前,我认为描述我正在使用的堆栈可能会有所帮助。它涉及3个EC2实例;结合 Nginx 和 Gunicorn 运行 django 的应用服务器;一个运行 MySQL 和 Redis 的数据库;和一个运行 Nginx 的媒体服务器。应用服务器使用 NFS 从媒体服务器本地挂载媒体目录。AWS 中所有适当的端口均已打开,并且应用程序服务器已添加到媒体服务器上的 /etc/exports。

关于我看到的问题...应该由 sorl-thumbnail 生成的所有图像的 img src 属性为空。当我查看我的 django 应用程序的日志时,对于每个丢失的图像,我都会看到这样的条目:

[04/29/2013 13:11:54] DEBUG   : Could not find thumbnail image for rendering </media/images/12345.jpg>
ThumbnailException: Source file: '/images/12345.jpg' does not exist.
[04/29/2013 13:11:54] DEBUG   : Could not retrieve image for </media/images/12345.jpg>

但是,/media/images/ 中确实存在 12345.jpg。

我花了周五的大部分时间试图解决这个问题,但无济于事。有没有人遇到过这样的事情?

4

1 回答 1

1

生成的数据(如图像缩略图)通常存储在(相对)临时文件系统位置,并且sorl-thumbnail 的操作方式表明相同:

当您使用缩略图模板标签时,sorl-thumbnail 在键值存储中查找缩略图。缩略图的密钥是从其文件名和存储中生成的。[...]值得注意的是,如果在键值存储中找到缩略图键,则 sorl-thumbnail 不会检查源或缩略图是否存在。

注意: 这意味着如果您更改或删除源文件或删除缩略图,sorl-thumbnail 仍会从 Key Value Store 中获取。因此,如果您删除或更改源文件或缩略图文件,请务必通知键值存储。

[强调我的]

现在,Amazon EC2实例通常具有两种不同的存储类型,即在克隆实例时复制的持久性Amazon Elastic Block Store (Amazon EBS)卷,以及Amazon EC2 实例存储卷(通常称为临时存储),克隆实例时丢失;查看我对如何备份 aws ec2 实例/临时存储的回答?有关此差异/问题的更多信息。

因此,大概您的缩略图已存储在临时卷上,现在需要相应地生成。

于 2013-04-29T18:52:09.157 回答