2012-03-27 82 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