我遇到的问题是,在资产预编译与config.action_controller.asset_host中定义的CDN网址不匹配后,通过链接器生成CDN网址
我正在使用asset_sync将我的所有资产上传到存储桶。这是我的asset_sync.yml文件:
defaults: &defaults
fog_provider: 'AWS'
aws_access_key_id: "sdfgdsfdfgdsfgd"
aws_secret_access_key: "sdfgsdfgdfgdfgsdfgsdg"
fog_directory: "bucketnamehere"
existing_remote_files: delete
gzip_compression: true
manifest: true
local:
<<: *defaults
在我的环境/ local.rb文件中,我有:
config.action_controller.asset_host = "fffefeefefef.cloudfront.net"
config.requirejs.run_config['baseUrl'] = config.action_controller.asset_host
config.assets.digest = true
config.assets.enabled = true
config.assets.initialize_on_precompile = true
config.assets.precompile << Proc.new do |path|
if path =~ /\.(css)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_path = Rails.root.join('app', 'assets').to_path
if full_path.starts_with? app_assets_path
puts "including asset: " + full_path
true
else
puts "excluding asset: " + full_path
false
end
else
false
end
end
一切似乎都预先编译好了,我可以看到我的存储桶上的所有资产,我可以通过fffefeefefef.cloudfront.net
访问它们。
然而,存在一个主要问题。
在我的所有.scss文件中,当我使用image-url时,sprockets使用了错误的CDN名称。例如,如果我有以下css:
.discount-title{
background: image-url('deleted/txt-discount.gif') no-repeat;
}
将其渲染为:
.discount-title {
background: url(//rtrtrtrtrtt.cloudfront.net/assets/deleted/txt-discount-4666207b3ce9b9403bd940fec6d73139.gif) no-repeat;
}
我不知道从哪里抓取rtrtrtrtrtt.cloudfront.net
。在我的源代码中没有提到它,或者即使我在我的VM中执行grep。我明确声明我的asset_host是fffefeefefef.cloudfront.net
。我的aws帐户中确实存在rtrtrtrtrtt.cloudfront.net
,但我不想将它用于此项目。
我已经尝试清除缓存,重新启动我的VM,删除两个CDN所连接的存储桶中的所有内容并运行资源预编译,并删除公共/资产中的所有内容。我不知道从哪里获得其他CDN。
请帮忙。
gems:rails 4.0.0,sprockets 2.10.1