2012-11-11 27 views
5

我有一個rails 3.1.0 heroku應用程序,它使用Amazon cloudfront cdn提供資產。一切工作正常,除了背景圖像,它沒有呈現。檢查請求螢火/ YSlow的顯示 GET box.png 403 Forbidden d2g4atxxxxxx.cloudfront.net 231 B 54.240.xxx.xxx:xx 和URL的圖像是http://d2g4xxxxxxxx.cloudfront.net/assets/box.png。正如你可以看到它是不是圖像不fingerprinted.In application.css我有這個background-image:url('box.png'); 的事情,我試圖Rails 3.1資產管道線與Cloudfront CDN中的背景圖像問題

1嘗試

我所附.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 

然後我切換回

config.action_controller.asset_host ="http://d2gxxxxxxx.cloudfront.net" 

然後我沒有

git add application.css.erb 
git commit -a 
git push origin master 

但它沒有工作

第二個嘗試

我追加.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 

然後我切換回

config.action_controller.asset_host ="http://d2gxxxxxxx.cloudfront.net" 

然後我做了

然後我說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 

而且它沒有工作

我有什麼

的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 

app/config/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 

問題

我到底做錯了什麼?還是我失去了哪一步,能走有人通過我的步驟嗎?我花了整整一個星期讀不同的博客和不同關於這個問題沒有luck.Thanks提前

+0

當你試圖用你的瀏覽器訪問的背景圖像,是它正常工作? –

回答

4

我使用自定義起源與CloudFront而不是S3。這意味着CloudFront指向您的Rails應用程序而不是S3。這會導致您的所有資產被版本化並可能解決您的問題。

這是一篇關於使用Rails Asset Pipeline時自定義起源的CloudFront的文章。你可以在google更多的話題:

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

這裏還有一個SO更多信息問題:

Rails 3 automatic asset deployment to Amazon CloudFront?

+0

這是一個不錯的選擇,但我有很多圖像,所以我想要他們在S3鬥。 – katie

+0

在CSS上花費太多時間之前,請確保可以通過直接鏈接到S3訪問圖像。 403禁止表示您的權限未在S3存儲桶中正確設置。確保你已經允許每個人訪問你的存儲桶中的文件。這是每個嘗試「不起作用」嗎? – joelvh

+0

其餘的圖像從S3正確加載,只是背景圖像只有問題。 – katie