[英]Dealing with assets and s3 buckets in Rails 4.2.1
我正在使用 asset_sync 從 S3 存儲桶提供我的資產(css、js 和圖像)。 我無法加載我的 CSS/JS(我收到 403 禁止錯誤)但圖像加載正常。 我想我已經發現了這個問題(它看起來不像它的存儲桶或 IAM 權限)。
當我上傳我的資產時,會生成一個文件名
mybucket.s3.amazonaws.com/assets/application-123456789101112.css
但是,當我的應用程序然后嘗試調用 css 文件時,它嘗試獲取的 url 就像
mybucket.s3.amazonaws.com/assets/application.self-573489573934.css
主要區別是包含self
和一個完全不同的 MD5 哈希字符串,因此在嘗試訪問此 url 時是被禁止的。
這是我的 asset_sync 配置
if defined?(AssetSync)
AssetSync.configure do |config|
config.fog_provider = 'AWS'
config.aws_access_key_id = ENV['AWS_ACCESS_KEY_ID']
config.aws_secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
config.fog_directory = ENV['FOG_DIRECTORY']
config.existing_remote_files = "delete"
config.gzip_compression = true
config.manifest = true
config.custom_headers = { '.*' => { cache_control: 'max-age=315576000', expires: 1.year.from_now.httpdate } }
end
end
我也認為問題可能出在我的環境設置中。 與 Rails 4 相比,rails 4.2.1 有什么變化嗎?
這與它有什么關系嗎? https://github.com/thoughtbot/paperclip/issues/1772
在我的 development.rb (因為我現在只是在本地測試這個)我有
config.assets.compile = true
config.assets.digest = true
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? # Never seen this one before
在開發中(默認情況下)像 javascripts 和 css 這樣的東西是單獨加載的,而不是合並到一個文件中。 例如,如果 application.js 有
//= require jquery
//= require something.js
然后在開發中javascript_tag :application
將為這兩個文件插入單獨的<script>
標簽,附加時間戳而不是 md5 校驗和,而不是對組合 application.js 文件的單個請求
這些單個文件在 S3 中不存在,您將收到 403(它是 403 而不是 404,因為如果您無權列出存儲桶,那么默認情況下對不存在的對象的請求會導致 403 錯誤)。
圖像不受此影響,因為沒有等效的將圖像組合在一起的東西(除非您使用 gem 自動處理 css sprites)
控制這個的設置是
config.assets.compress
然而,這似乎是一個非常奇怪的開發設置,其中對資產的任何更改都需要您將它們推送到 s3。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.