我有一个rails 3.1.0 heroku应用程序,它使用亚马逊cloudfront cdn来提供资产。除了背景图像之外,一切正常,它没有渲染。在firebug / Yslow节目中检查请求
GET box.png 403 Forbidden d2g4atxxxxxx.cloudfront.net 231 B 54.240.xxx.xxx:xx
并且图像的网址是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
然后我换回
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
应用程序/配置/ 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
问题
我做错了什么?或者我错过了什么步骤,有人可以指导我完成这些步骤吗?我花了整整一周阅读不同的博客和不同的问题,没有运气。谢谢提前
答案 0 :(得分:4)
我使用CloudFront而不是S3使用自定义源。这意味着CloudFront指向您的Rails应用程序而不是S3。这将导致您的所有资产都为您设置版本,并可能解决您的问题。
这是一篇关于使用Rails Asset Pipeline时具有自定义起源的CloudFront的文章。您可以更多地了解相关主题:
http://blog.ertesvag.no/post/10720082458
这是另一个有更多信息的SO问题: