我有一个rails应用程序,用户可以上传汽车图片然后我在滑块上显示它们。我正在使用Carrierwave和RMagick。
我已将我的应用推送到heroku并上传了一些汽车图片以及用户个人资料图片。
起初,heroku完美地显示图片,但在稍后的某个时间,Heroku在上传的图片上显示加载错误(404找不到错误)。
我认为这可能是因为RMagick因为当我推送应用程序时它会发出警告RMagick被折旧需要rmagick。
我的image_uploader.rb文件;
# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :large do
process :resize_to_fill => [327, 282]
end
version :mid do
process :resize_to_fill => [217, 141]
end
end
图片保存在public/uploads/picture/image/1/car_mid.png
修改
也许那可能是个问题?我正在为Heroku使用免费帐户。 Heroku not saving uploaded pictures。但是当我上传时,我会看到图片,过了一会儿它们就会消失。
EDIT2:
我上传了一些汽车图片之后,我已经通过heroku restart
命令重新启动了heroku app,这些图片都消失了(404找不到)。所以,你认为问题是因为我使用1 dyno的免费帐户吗?
答案 0 :(得分:1)
Heroku上的文件系统没有持久化。只有通过部署机制(git push)上传的文件才会持续存在&#34;。其他类似public
文件夹中的内容将被删除。这就是他们消失的原因。
我已回复了similar question here。这是一个引用:
你在Heroku上的dyno有一个&#34;只读&#34;文件系统。从某种意义上说,您的dyno重启之间不会保留您的文件,并且无法保证它们会在任何两个请求之间保持不变。这是一个excerpt from the docs:
每个dyno都有自己的短暂文件系统,不与任何其他dyno共享,一旦断开连接就会被丢弃。这个文件系统填充了slug存档,因此一次性dynos可以充分利用应用程序中部署的任何内容。
您可以将#{Rails.root}/tmp
文件夹用作临时文件夹,但需要将文件上传到某些外部存储设备(S3,某些CDN等)。 Heroku有一些插件可以轻松处理。