作者:137381372_e57647 | 来源:互联网 | 2024-12-12 15:22
最近,我在研究如何在一个能够同时运行 Ruby on Rails 3 和 Rails 4 的环境中高效地管理资产(assets),特别是当这些资产需要从内容分发网络(CDN)加载时。在这个场景下,确保资产文件的无缝更新和回滚能力至关重要。
在 Rails 3 中,我们通常通过同步 manifest.yml
文件来实现不同服务器之间的资产同步。而到了 Rails 4,这一机制演进为使用多个 manifest-*.json
文件。我的目标是在不中断服务的情况下完成这一过渡,并且确保所有服务器都能正确映射原始资产名称到其对应的已处理(digest)名称。
目前,我的思路是通过修改 Sprockets 的辅助模块来兼容这两种不同的清单格式。具体做法如下:
module Sprockets
module Rails
module Helper
def asset_digest_path(path, optiOns= {})
if manifest = assets_manifest
yaml_dictionary ||= YAML.load_file('./public/assets/manifest.yml') rescue {}
if digest_path = (yaml_dictionary[path] || manifest.assets[path])
return digest_path
end
end
if envirOnment= assets_environment
if asset = environment[path]
return asset.digest_path
end
end
end
end
end
end
尽管上述方法可行,但我相信一定还有更优雅的解决方案。如果您有任何建议或遇到过类似问题,欢迎分享您的经验。
解决方案