2013-08-01 30 views
0

我有​​資產託管工作js,cssstatic images。但我想,以排除從​​動態生成(使用send_file)照片,並且希望瀏覽器直接去我的應用程序的URL,例如圖像,Rails:不包括來自CDN鏈接的圖像

即去http://www.myapp.com/user_photos/2/images/5

但由send_file網址獲取輸出因爲http://cdn.myapp.com/user_photo/2/images/5

原因是,存在#view圖像的控制器需要授權,並且出於某種原因,cookie並未將其一直帶回應用服務器。因此,即使我想在中間作爲用於動態地生成的圖像中繼到使用​​,它失敗控制器權限(使用康康舞/設計一種用於AUTH)

在production.rb我有:

config.action_controller.asset_host = "http://cdn.myapp.com/"

我試着在載波配置以下,但它沒有工作:

config.asset_host = "http://www.myapp.com/"

如何排除EXC某些航線有什麼想法由CDN引起的痙攣?

+0

奇怪的是,它應該工作不出奇怪的只是嘗試覆蓋'url'方法 – Viren

回答

0

解決方法是在production.rb文件中設置條件,該文件根據URL模式設置asset_host。就我而言,我想在user_photos東西從不同的資產主機提供比其他所有的靜態資產:

config.action_controller.asset_host = Proc.new { |source| 
    case source 
    when /\/user_photos\// 
    APP_CONFIG['dynamic_photos_root_url'] 
    else 
    APP_CONFIG['asset_cdn'] 
end 
} 

載波配置的變化並沒有做任何事情,所以我最終刪除它們。

CDN是亞馬遜的雲端服務,他們做了一些奇怪的事情,即使我將CDN的行爲設置爲通過所有cookie,我也不明白。

討論之後是找出解決方案的關鍵: Configure dynamic assets_host in Rails 3

我不知道是否有一種方式來獲得亞馬遜的CloudFront的工作在那裏緩存此圖像,並通過同一個用戶的後續命中,它通過cookie到源,獲得認證,然後將相同的緩存圖像提供給瀏覽器。