在scss文件中呈现image-url时,Rails sprockets使用错误的CDN

时间:2015-04-09 00:11:21

标签: ruby-on-rails cdn sprockets

我遇到的问题是,在资产预编译与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

0 个答案:

没有答案