簡體   English   中英

Rails 4 App映像資產指向錯誤的CloudFront域名

[英]Rails 4 App image assets pointing to wrong CloudFront domain name

我在Heroku上運行Rails 4應用程序,使用CloudFront作為某些圖像資產的CDN。 我有一個Production應用和一個Staging應用。 在CloudFront上,我具有用於生產和暫存的單獨發行版。 我正在本地預編譯資產,並將其推送到Heroku。

我的production.rb具有以下內容:

# production.rb
config.action_controller.asset_host = 'xxxx.cloudfront.net'
# Use special staging CDN if pushing to staging
config.action_controller.asset_host = 'yyyy.cloudfront.net' if ENV['PUSH_TO'] && ENV['PUSH_TO'].downcase == 'staging'

因此,根據要推送到暫存還是生產環境,我要指定一個不同的asset_host。

但是,當我進行暫存時,生成的圖像將丟失並指向Production CloudFront發行版。

我在應用程序中放置了一些日志記錄語句,以確保將config.action_controller.asset_host設置為正確的暫存分發。

如果我通過將主機從生產主機更改為暫存主機來手動訪問圖像URL,則它們可以正常更新指紋。

我的.css.scss.erb文件包含:

.importance1 { background-image: image-url("<%= asset_path 'myImage1.png' %>"); }

我確保清除了我的public/assetstmp文件夾。

那么,是什么導致我在Staging上的資產指向錯誤的CloudFront分配?

更新:我發現只有從其他資產(css文件)中使用asset_path資產才能獲得錯誤的CDN主機。 同時,使用image_tag從視圖顯示的資產運行良好。 這使我認為問題出在預編譯資產期間,錯誤的url從css文件中的asset_path獲取輸出。 不知道為什么。 我叫rake RAILS_ENV=production assets:clean assets:precompile ,就像我說過的那樣,我嘗試修改production.rb以明確地將登台CDN用作測試,但它仍然沒有使用(資產仍然指向到生產CDN。)

我終於解決了我的問題。即使我的登台應用程序使用的是正確的asset_host,並且文件是通過正確的CDN提供的,但這些文件中的網址仍指向錯誤的CDN(生產CDN)。這是因為在預編譯資產時,未設置PUSH_TO env變量,因此production.rb中的邏輯使用生產CDN。 解決方法是:

rake RAILS_ENV=production PUSH_TO=staging assets:clean assets:precompile

關鍵是在那里的PUSH_TO = staging。 這解決了我所有的問題!

顯然,您在此行的條件返回false:

config.action_controller.asset_host = 'yyyy.cloudfront.net' if ENV['PUSH_TO'] && ENV['PUSH_TO'].downcase == 'staging'

否則,或者asset_host將不允許設置兩次。 不知道為什么會這樣。 最好將其放在else塊中。

因此,請解決此問題,然后您將被設置。

但....

這不是什么環境文件嗎? 為什么您的環境/staging.rb文件中沒有這個? 如果它在那里不起作用,則說明您已經破壞了環境配置,還打敗了多個環境的整個目標……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM