【发布时间】:2016-06-23 11:36:29
【问题描述】:
知道如何使用 Carrierwave 通过 Heroku 上传图片。
我将此添加到上传文件中:
def cache_dir
"#{Rails.root}/tmp/uploads"
end
但图像仍然无法保存!图片上传后会保存,刷新页面后图片会中断。
任何帮助将不胜感激!谢谢
【问题讨论】:
标签: ruby-on-rails heroku carrierwave
知道如何使用 Carrierwave 通过 Heroku 上传图片。
我将此添加到上传文件中:
def cache_dir
"#{Rails.root}/tmp/uploads"
end
但图像仍然无法保存!图片上传后会保存,刷新页面后图片会中断。
任何帮助将不胜感激!谢谢
【问题讨论】:
标签: ruby-on-rails heroku carrierwave
我认为如果没有像 Amazon S3 这样的第三方存储服务,你不能使用 Heroku 和上传图片。
https://devcenter.heroku.com/articles/s3
Heroku 允许您将文件存储在 tmp 中,但只是为了发送到第 3 方服务。例如,您可以在carrierwave上传器类中设置
存储:雾
而不是默认的 :file 和设置上传到 AWS S3。还有其他选择。
有一件事是,如果您在 Heroku 上使用免费层级实例,您的上传需要在一分钟内完成 - 我建议您设置直接将文件上传到 s3 帐户的设置。
https://github.com/dwilkie/carrierwave_direct
希望对你有帮助
【讨论】:
Heroku 上的文件系统没有持久化。只有通过部署机制(git push)上传的文件才会“持久化”。 "#{Rails.root}/tmp/uploads" 文件夹中的其他内容将被删除。这就是它们消失的原因。
我已回复similar question here。这是一个引用:
您在 Heroku 上的测功机有一个“只读”文件系统。从某种意义上说,您的文件不会在您的 dyno 重新启动之间保留,并且不能保证它们将在任何两个请求之间保留。这是excerpt from the docs:
每个测功机都有自己的临时文件系统,不与任何其他测功机共享,一旦您断开连接,该文件系统就会被丢弃。该文件系统由 slug 存档填充,因此一次性 dynos 可以充分利用应用程序中部署的任何内容。
您可以将#{Rails.root}/tmp 文件夹用作临时文件夹,但您需要将文件上传到某些外部存储(S3、某些 CDN 等)。 Heroku 有一些易于处理的插件。
【讨论】: