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

qichunren · 发布于 2017年05月10日 · 最后由 huacnlee 回复于 2017年05月10日 · 757 次阅读
F46600

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

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

共收到 11 条回复
1

用 cdn 回源最简单

F46600

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

1
F46600qichunren 回复

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

2329

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

De6df3

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

15
2329mingyuan0715 回复

七牛直接回源就好了呀

2329
15huobazi 回复

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

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

15
2329mingyuan0715 回复

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

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

2329

主要是怕失控吧。。。

你这个主意不错。

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

1

cdn 设缓存过期时间

De6df3

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

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