我在 homeland 中没有搜索到相关的内容。
部署 assets 到 upyun 的 cdn 这一步是自动完成的吗?
我做过七牛的。 可以扩展下 sprockets 的 exporter
文档:https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#exporters
示例代码:
require 'sprockets/exporters/base'
# Writes a an asset file to Qiniu
class QiniuExporter < Sprockets::Exporters::Base
def skip?(logger)
if Sprockets.config[:sync].to_s == 'qiniu'
logger.info "==> To Upload to Qiniu: #{ target }"
false
else
true
end
end
def call
QiniuHelper.upload target, 'assets/' + asset.digest_path.to_s
end
end
Sprockets.register_exporter '*/*', QiniuExporter
针对 remove 文件的:
require 'sprockets/manifest'
module NonDigestAssets
def remove(filename)
super
if Sprockets.config[:sync].to_s == 'qiniu'
QiniuHelper.delete 'assets/' + filename.to_s
logger.info "--> Removed from Qiniu: #{ filename }"
end
end
end
Sprockets::Manifest.send(:prepend, NonDigestAssets)
然后正常的 rake assets:precompile 和 rake assets:clean 就可以同步 assets 的变动了。
回源没办法处理 清理的 静态资源文件。如果频繁部署,就会在七牛上产生越来越多的垃圾文件。
这个问题有好的解决方案么?七牛提供的倒有个文件同步工具,不过一堆 bug。
用云存储了怕那点消耗呀 如果非要这么做,我觉得可以考虑 hack 一下 rails asset 存放目录,加一级可配置的目录,比如按月存储,定期去七牛后台删掉过期的目录。
或者每次发布后都清空七牛存储目录 cdn 让重新抓?
主要是怕失控吧。。。
你这个主意不错。
之前想过的一个方案是用一个专门的 bucket 只存静态文件,定期全部清理下,殊途同归。不过我觉得 hack 下 remove 方法已经够简单了。