2012-03-27 111 views
3

在生产中,我在S3上使用Heroku和动态资产。它工作正常。 现在我尝试将我的静态资产发送到S3。我跟着这个教程https://devcenter.heroku.com/articles/cdn-asset-host-rails31S3中的资产路径问题

我加asset_sync宝石,我配置了我的Heroku ENVS,我的配置/ 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

您正在使用Rails 3.2,因此现在更容易。取出asset_sync宝石。转到亚马逊并查找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" 
+0

我正在尝试使用CloudFont。这是我第一次使用它。 问题是完全一样的。它试图使用application-78f1cb320258c94aa117a5c29a985b4d.css而好的文件是application-8ca5a598d66f10665412206609959502.css 2012-03-27 13:05:52