0

我是一个 Rails 新手,所以我不确定我应该如何构建它,并希望得到一些输入。

基本上,我想向我的应用程序的用户展示一些图像(具有可预测的文件名)。我会把它们从远程主机上取下来,但我当然不想为每个请求都在那里进行热链接,所以我想以某种方式将它们缓存在我的服务器上。理想情况下,当有人第一次请求图像时,它会从远程服务器下载并呈现给用户,而对于同一图像的后续请求,它将像任何其他静态资产一样被提供和缓存。

通常我只会将图像下载到本地文件系统的public文件夹中,但由于我在 Heroku 上运行这个应用程序,所以我没有持久的写访问权限。在我的情况下,处理这一切的好策略是什么?不是在代码中寻找完整的解决方案,只是一些指针。谢谢!

4

1 回答 1

1

这是我的处理方法:

首先,在任何地方你都会引用这些图像,而不是在你自己的应用程序中调用控制器上的动作。然后,编写该控制器操作以执行以下操作:

  1. 给定一个文件名,
  2. 检查图像是否存在于您的 S3 存储桶中;如果是这样,请将 S3 链接返回给它。
  3. 如果没有,下载并存储到S3;然后将 S3 链接返回给它。

由于您使用的是 Heroku,因此更好的方法可能是让该操作启动 delay_job 以检索图像(并将其存储在 S3 中)。然后,在您的视图中,有一个轮询机制来定期询问控制器操作是否图像可用。如果不是,则显示加载图标,如果是,则显示图像(指向 S3 上图像的 URL)。在等待图像被缓存时,走这条路线不会占用你的一个测功机。

当然,如果您可以自己预先缓存所有这些远程图像,事情就可以简化。也许是一个 rake 任务,它下载所有这些图像并将它们存储在 S3 中。

希望这可以帮助。

于 2012-07-04T19:06:37.280 回答