鉴于rake assets:clean
完全清空了public/assets
目录,我在解决如何存储模型实例资产时遇到了一些问题。
例如,我有一个Wine模型,它使用Carrierwave在public/assets/wines/[version]_[wine_name].[ext]
中存储上传照片的多个版本。这很好用。资产很容易获取。
但由于它存储在public/assets/*
中,因此运行rake assets:clean
会删除它们!我该怎么办呢?
答案 0 :(得分:2)
我刚为我的投资组合网站做过这个。将通过某种管理面板上传的用户资产应存储在云端。类似于Amazon S3存储桶的东西。注册亚马逊网络服务。
它可以释放到某一点。如果你使用像heroku这样的东西进行部署,你应该特别这样做,否则你可能会在下次提交时删除它们。我用过回形针,设置很简单。 Carrierwave可能类似。
答案 1 :(得分:0)
答案如此令人难以置信的简单,我无法相信我没想过要早点尝试。
Carrierwave示例:
# It was this before
def store_dir
"assets/photos#{ '/testing' if Rails.env.test? }"
end
# Now it's this
def store_dir
"for/photos#{ '/testing' if Rails.env.test? }"
end
即文件夹布局如下:
..app/
../public
../assets # Contains only precompiled assets
../for # Contains only model instance assets
常规预编译资产解析为http://mydomain.com/assets/*
,实例资产解析为http://mydomain.com/for/*
。具体来说,我有一个子域名指向我的资产http://assets.mydomain.com
,所以例如它解析为http://assets.mydomain.com/for/wines/some-asset.jpg
。
这解决了rake assets:clean
的问题,因为永远不会触及/for
目录。无需在场外明确托管资产。
现在我是否需要在生产中指定其他内容以便实际提供资产,我不知道 - 但至少在开发过程中这是有效的。