Rails 3.1资产管道中的背景图像问题与cloudfront CDN

kat*_*tie 5 cdn heroku amazon-s3 ruby-on-rails-3 amazon-cloudfront

我有一个rails 3.1.0 heroku应用程序,它使用亚马逊cloudfront cdn来提供资产.除了背景图像之外,一切正常.它没有渲染.在firebug/Yslow节目中检查请求, GET box.png 403 Forbidden d2g4atxxxxxx.cloudfront.net 231 B 54.240.xxx.xxx:xx 图像的URL是http://d2g4xxxxxxxx.cloudfront.net/assets/box.png.你可以看到它不是图像没有指纹.在application.css我有这个background-image:url('box.png'); 我试过的东西

第一次尝试

我将.erb附加到application.css并添加background-image:url(<%=asset_path 'box.png'%>); 然后我添加了 config.action_controller.asset_host="http://mybucket_name.com.s3.amazonaws.com"
然后我做了

bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

然后我转回去了

config.action_controller.asset_host ="http://d2gxxxxxxx.cloudfront.net"
Run Code Online (Sandbox Code Playgroud)

然后我做了

 git add application.css.erb
 git commit -a
 git push origin master
Run Code Online (Sandbox Code Playgroud)

但它没有用

第二次尝试

我将.scss附加到application.css并添加background-image:image-url('box.png'); 然后我添加 config.action_controller.asset_host="http://mybucket_name.com.s3.amazonaws.com"
然后我做了

bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

然后我转回去了

config.action_controller.asset_host ="http://d2gxxxxxxx.cloudfront.net"
Run Code Online (Sandbox Code Playgroud)

然后我做了

然后我添加 gem 'compass-rails'到gemfile并创建了compass.rb并添加了这个

   #In compass.rb
  project_type = :rails
  line_comments = false
  generated_images_dir = "public/assets"


 bundle install
 git add application.css.scss  compass.rb
 git commit -a
 git push origin master
Run Code Online (Sandbox Code Playgroud)

但它也没有用

是)我有的

的Gemfile

  source 'http://rubygems.org'

  gem 'rails', '3.1.0.rc8'


  group :development do
  gem 'sqlite3'
  end
  gem 'geocoder'
  gem "dynamic_form"
  gem 'devise'
  gem 'rack', '1.3.3'
  gem 'execjs'
  gem 'carrierwave'
  gem "meta_search",'>= 1.1.0.pre'
  gem "thumbs_up"
  gem 'geocoder'
  gem 'fog'
  gem 'koala'



   group :production do
   gem 'pg'
   gem 'therubyracer'
   gem 'unicorn'

   end
   gem 'jquery-rails'
   gem 'thin'

   gem 'mongrel', '1.2.0.pre2', :group => :development

   gem 'sass-rails', "  ~> 3.1.0.rc"
   gem 'coffee-rails', "~> 3.1.0.rc"
   gem 'uglifier'
   gem 'yui-compressor'
   gem "asset_sync"
  # gem 'compass-rails'


   group :test do
   # Pretty printed test output
   gem 'turn', :require => false
   gem 'rspec-rails'
   gem "factory_girl_rails"
   gem 'capybara'
   gem "guard-rspec"
   end
Run Code Online (Sandbox Code Playgroud)

应用程序/配置/ enviroenments/production.rb

    Deals::Application.configure do

    config.cache_classes = true

   # Full error reports are disabled and caching is turned on
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.action_controller.asset_host ="http://d2g4xxxxxx.cloudfront.net"

  config.serve_static_assets = true

  # Compress JavaScripts and CSS
  config.assets.compress = true
   config.assets.compile = true
    config.assets.digest = true
   config.assets.css_compressor = :yui
    config.assets.js_compressor = :uglifier
      config.i18n.fallbacks = true
    config.active_support.deprecation = :notify
    end
Run Code Online (Sandbox Code Playgroud)

我做错了什么?或者我错过了什么步骤,有人可以指导我完成这些步骤吗?我花了整整一周的时间阅读不同的博客和不同的问题而没有运气.谢谢你提前

joe*_*lvh 4

我使用 CloudFront 的自定义源而不是 S3。这意味着 CloudFront 指向您的 Rails 应用程序而不是 S3。这将使您的所有资产都进行版本控制,并可能解决您的问题。

这是一篇有关使用 Rails Asset Pipeline 时具有自定义源的 CloudFront 的文章。您可以通过谷歌搜索有关该主题的更多信息:

http://blog.ertesvag.no/post/10720082458

这是另一个包含更多信息的问题:

Rails 3 自动资产部署到 Amazon CloudFront?