2

我正在使用Assets Sync在部署时将资产上传到 S3。所有资产均已正确上传并存储在 S3 上。

应用中使用的js、css、字体均指向S3,图片除外

我想问题可能出在rails应用程序上......

到底是怎么回事?

我的初始化程序配置文件:

AssetSync.configure do |config|
  config.fog_provider = 'AWS'
  config.fog_directory = ENV['FOG_DIRECTORY']
  config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID']
  config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']

  # Don't delete files from the store
  # config.existing_remote_files = 'keep'
  #
  # Increase upload performance by configuring your region
  # config.fog_region = 'eu-west-1'
  #
  # Automatically replace files with their equivalent gzip compressed version
  config.gzip_compression = true
  #
  # Use the Rails generated 'manifest.yml' file to produce the list of files to
  # upload instead of searching the assets directory.
  # config.manifest = true
  #
  # Fail silently.  Useful for environments such as Heroku
  config.fail_silently = true
end

配置/环境/staging.rb

MyApp::Application.configure do
  routes.default_url_options[:host]= ENV['DOMAIN']

  config.cache_classes = true  
  config.cache_store = :dalli_store
  config.static_cache_control = "public, max-age=2592000"
  config.action_controller.perform_caching = true

  config.consider_all_requests_local = false

  config.serve_static_assets = true
  config.assets.compress = true
  config.assets.compile = false
  config.assets.digest = true
  config.assets.enabled = true
  config.assets.js_compressor = :uglifier
  config.assets.precompile += %w(static.js static.css vendor.js)

  config.assets.paths << Rails.root.join('app', 'assets', 'fonts')

  config.action_controller.asset_host = "//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com"
  config.assets.prefix = "/assets"

  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify

end

谢谢!

4

1 回答 1

0

问题在于你的 CSS

我们只需要解决这个问题,如果你知道发生了什么就很简单了

您的应用需要使用SCSS (SASS),以确保 rake 可以将 image_paths 编译到您的 CSS 文件中。

所以而不是使用

/*-- Typical .CSS (static) --*/
.profile_page {
    background: url(background.png);
}

您需要确保您的应用程序可以处理编译过程,这就是 SCSS 的用武之地:

/*-- file.css.scss (dynamic) --*/
.profile_page {
    background: asset_url(background.png)
}

这里有一个关于 Rails 应用程序中 SCSS 的很好的资源Proper SCSS Asset Structure in Rails

我们所做的是更改application.css-> application.css.scss,然后导入各种不同的 .scss 文件,其中包含 assets_path 定义:

@import 'fonts';

这意味着我们可以将 fonts.css.scss 文件更改为以下格式:

/*-- Akagi Font --*/
@font-face {
    font-family: 'akagi';
    src: asset_url('fonts/akagi-th-webfont.eot');
    src: asset_url('fonts/akagi-th-webfont.eot?#iefix') format('embedded-opentype'),
         asset_url('fonts/akagi-th-webfont.woff') format('woff'),
         asset_url('fonts/akagi-th-webfont.ttf') format('truetype'),
         asset_url('fonts/akagi-th-webfont.svg#akagithin') format('svg');
    font-weight: 300;
    font-style: normal;
}
@font-face {
    font-family: 'akagi';
    src: asset_url('fonts/akagi-bk-webfont.eot');
    src: asset_url('fonts/akagi-bk-webfont.eot?#iefix') format('embedded-opentype'),
         asset_url('fonts/akagi-bk-webfont.woff') format('woff'),
         asset_url('fonts/akagi-bk-webfont.ttf') format('truetype'),
         asset_url('fonts/akagi-bk-webfont.svg#akagibook') format('svg');
    font-weight: 400;
    font-style: normal;
}
@font-face {
    font-family: 'akagi';
    src: asset_url('fonts/akagi-sb-webfont.eot');
    src: asset_url('fonts/akagi-sb-webfont.eot?#iefix') format('embedded-opentype'),
         asset_url('fonts/akagi-sb-webfont.woff') format('woff'),
         asset_url('fonts/akagi-sb-webfont.ttf') format('truetype'),
         asset_url('fonts/akagi-sb-webfont.svg#akagisemibold') format('svg');
    font-weight: 500;
    font-style: normal;
}

这修复了所有路径,但rake asset:precompile确实很慢


重要的提示

让它正常工作有一个技巧,它是在生产环境中预编译资产,如下所示:

rake assets:precompile RAILS_ENV=production
于 2013-10-15T12:50:33.530 回答