5

我有一个rails 3.1.0 heroku应用程序,它使用Amazon cloudfront cdn交付资产。除了未渲染的背景图像外,其他一切都正常。检查firebug/Yslow中的请求GET box.png 403禁止d2g4atxxxxxx.cloudfront.net 231 B 54.240.xxx.xxx:xx图像的url是http://d2g4xxxxxx.cloudfront.net/assets/box.png正如你所见,这不是图像没有指纹。在application.css中我有这个背景图片:url('box.png'); 我尝试过的事情

第一次尝试

我在application.css中附加了.erb并添加了背景图像:url(<%=asset_path'box.png'%>);然后我补充道config.action_controller.asset_host=“网址:http://mybucket_name.com.s3.amazonaws.com"
然后我做了

捆绑execrake资产:预编译

然后我切换回

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

然后我做了

git添加应用程序.css.erbgit提交-agit推送源主机

但没用

第二次尝试

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

捆绑execrake资产:预编译

然后我切换回

config.action_controller.asset_host=“http://d2gxxxxxx.cloudfront.net"

然后我做了

然后我补充道宝石“罗盘轨道”创建了compand.rb并添加了这个

#在罗盘.rb中项目类型=:轨道line_comments=错误generated_images_dir=“公共/资产”捆绑安装git添加应用程序.css.scss compand.rbgit提交-agit推送源主机

但也没用

我有什么

宝石档案

源'http://rubygems.org'gem'rails','3.1.0.rc8'组:开发dogem“sqlite3”结束gem“地理编码器”gem“dynamic_form”宝石“设计”宝石“支架”,“1.3.3”gem“execjs”gem“载波”gem“meta_search”,'>=1.1.0.pre'宝石“拇指朝上”gem“地理编码器”宝石“雾”宝石“考拉”组:生产do宝石“pg”宝石“therubyracer”宝石“独角兽”结束gem“jquery-rails”宝石“薄”gem“mongrel”,“1.2.0.pre2”,:group=>:开发gem“sass-rails”,“~>3.1.0.rc”gem'coffee-rails',“~>3.1.0.rc”宝石“丑陋者”gem“yui-compressor”gem“资产同步”#宝石“罗盘轨道”组:test do#打印精美的测试输出gem“turn”,:required=>falsegem“rspec-rails”gem“factory_girl_rails”宝石“水豚”gem“guard-rspec”结束

app/config/environments/production.rb

交易::Application.configure doconfig.cache_classes=真#禁用完整错误报告并启用缓存config.consider_all_requests_local=假config.action_controller.perform_cacheching=真config.action_controller.asset_host=“http://d2g4xxxxx.cloudfront.net"config.serve_static_assets=真#压缩JavaScripts和CSSconfig.assets.compress=真config.assets.compile=真config.assets.digest=真config.assets.css_compressor=:yuiconfig.assets.js_compressor=:丑陋者config.i18n.fallbacks=真config.active_support.deprecation=:通知结束

问题

我做错了什么?或者我错过了什么步骤,有人能带我走过这些步骤吗?我花了整整一周的时间阅读不同的博客和关于这件事的不同问题,但运气不佳。提前谢谢你

1

1答案1

重置为默认值
4

我在CloudFront中使用自定义源代码,而不是S3。这意味着CloudFront指向您的Rails应用程序,而不是S3。这将导致为您更新所有资产的版本,并可能解决您的问题。

这里有一篇关于使用Rails资产管道时使用自定义源的CloudFront的文章。你可以在谷歌上搜索更多关于这个主题的信息:

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

下面是另一个SO问题,提供更多信息:

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

4
  • 这是一个很好的选择,但我有很多图片,所以我想把它们放在s3木桶中。
    – 凯蒂
    评论 2012年11月12日14:36
  • 在花太多时间使用CSS之前,请确保可以通过S3的直接链接访问图像。403 Forbidden表示您在S3存储桶上的权限设置不正确。确保你已经允许每个人访问你的bucket中的文件。这就是每次尝试都“不起作用”的原因吗?
    – 乔尔夫
    评论 2012年11月12日20:20
  • 其余的图像都是从s3正确加载的,只有背景图像有问题。
    – 凯蒂
    评论 2012年11月12日20:59
  • 最后一个选项-手动将图像的非指纹版本复制到bucket中,然后在css中对完整URL进行硬编码。首先测试url并确保它是正确的。 评论 2015年4月27日12:17

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.