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

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

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

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

用 cdn 回源最简单

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

qichunren 回复

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

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

mingyuan0715 回复

七牛直接回源就好了呀

huobazi 回复

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

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

mingyuan0715 回复

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

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

主要是怕失控吧。。。

你这个主意不错。

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

cdn 设缓存过期时间

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

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