S3的资产路径问题

时间:2012-03-27 12:11:23

标签: ruby-on-rails heroku amazon-s3 asset-pipeline assets

在制作中,我在S3上使用Heroku和动态资源。它工作正常。 现在我尝试将我的静态资产发送到S3。我按照本教程https://devcenter.heroku.com/articles/cdn-asset-host-rails31

进行了操作

我添加了asset_sync gem,我配置了我的heroku ENVs,我的config / production.rb并运行 heroku run rake assets:precompile

似乎工作正常:

    Using: Directory Search of /app/public/assets
    Uploading: assets/application.js.gz
    Uploading: assets/application.css
    Uploading: assets/application-8977252f192f3e36dbd6b5142de920e3.css.gz
    Uploading: assets/eurof35-webfont-4ea19cda003d589e688cedcf9f79ddd6.eot
    Uploading: assets/application.css.gz
    Uploading: assets/application-8977252f192f3e36dbd6b5142de920e3.css
    Uploading: assets/application-a904f1bc7724b6f68e1f8d38d03a093e.js.gz
    Uploading: assets/application-a904f1bc7724b6f68e1f8d38d03a093e.js
    Uploading: assets/application.js
    AssetSync: Done.

然而,当我加载我的网站时,没有CSS或JS文件。 当我检查代码时 <link href="http://s3.amazonaws.com/annoncestest/assets/application-85cc4376a5de3b224db7c0548a44e7cb.css" media="all" rel="stylesheet" type="text/css" />

正如您所看到的,调用的CSS应用程序与我在S3存储桶中的应用程序不同。

你有什么想法吗?

编辑:但它适用于application.js文件,它需要好的文件。但不适用于css文件(application.css和admin.css)。我尝试使用CloudFront,结果是一样的。

2 个答案:

答案 0 :(得分:2)

您正在使用Rails 3.2,因此现在更容易。取出asset_sync gem。转到Amazon并查找CloudFront部分(而不是S3)。这是他们的CDN前端。您之前可能已将其设置为使用S3存储桶。

使用Rails 3.2,您所要做的就是设置CloudFront以使用“Origin”。使用原点,您可以提供应用程序的位置而不是存储桶。当用户从CDN请求文件时,CDN将转到您的应用程序获取文件并将其添加到CDN缓存。由于Rails资产使用唯一的文件名,因此您将始终拥有最新的文件。

将CloudFront位置放入rails应用程序作为资产来源。然后部署并让heroku编译您的资产。

将以下内容放入您的production.rb

  # Setup amazon CDN
  config.action_controller.asset_host = "xxxxxxxxxxxxx.cloudfront.net"

答案 1 :(得分:0)

要关闭票证,我终于通过Heroku的帮助找到了解决方案。 该解决方案位于此其他票证Why Heroku don't use the good manifest.yml

我希望它会有所帮助!