部署 Ruby China 的 assets 是如何部署到 UpYun 的 CDN?

qichunren · 2017年05月10日 · 最后由 huacnlee 回复于 2017年05月10日 · 2065 次阅读

我在 homeland 中没有搜索到相关的内容。

部署 assets 到 upyun 的 cdn 这一步是自动完成的吗?

用 cdn 回源最简单

cdn 回源是指 cdn 主机可以主动从 ruby-china 源服务器同步 assets 吗?@Rei

qichunren #1 回复

是的,我不知道现在在用什么,建议你用回源。

我做过七牛的。 可以扩展下 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 的变动了。

CDN 回源,这是标准的 CDN 功能

七牛直接回源就好了呀

huobazi #5 回复

回源没办法处理 清理的 静态资源文件。如果频繁部署,就会在七牛上产生越来越多的垃圾文件。

这个问题有好的解决方案么?七牛提供的倒有个文件同步工具,不过一堆 bug。

用云存储了怕那点消耗呀 如果非要这么做,我觉得可以考虑 hack 一下 rails asset 存放目录,加一级可配置的目录,比如按月存储,定期去七牛后台删掉过期的目录。

或者每次发布后都清空七牛存储目录 cdn 让重新抓?

主要是怕失控吧。。。

你这个主意不错。

之前想过的一个方案是用一个专门的 bucket 只存静态文件,定期全部清理下,殊途同归。不过我觉得 hack 下 remove 方法已经够简单了。

cdn 设缓存过期时间

CDN 有 ETag 和 Last-Modified 检查的逻辑来实现更新的逻辑的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号