Rails 3-Существует ли какой-либо резервный вариант для того, чтобы обслуживать активы с сервера активов?


В моем production.rb я установил следующее:

# Enable serving of images, stylesheets, and JavaScripts from an asset server
  config.action_controller.asset_host = "http://myassets.com"

И изображения, js и таблицы стилей загружаются нормально с моего CDN (assets server)

Но что, если однажды эти серверы активов выйдут из строя? и он возвращает 404?

Поскольку в моем сервере активов (CDN) я настроил pull zone, содержимое по-прежнему доступно из /assets/...

Существует ли какой-либо резервный вариант или как я могу сделать резервный вариант, чтобы при сбое или ошибке возврата мое приложение загружало ресурсы из /assets/ внутри приложения?

2 4

2 ответа:

Производство.rb

config.action_controller.asset_host = Proc.new { |source, request, asset_path|
  if some_condition
    "http://myassets.com"
  else
    asset_path
  end
}

Дополнительную информацию смотрите в разделе AssetTagHelper

Edit

Я не думаю, что эта предосторожность стоит дополнительной нагрузки/добавленных запросов к вашему приложению. Если бы вы создавали большое приложение с отказоустойчивыми серверами для обеспечения высокой доступности, ресурсы были бы еще одной вещью, которую вы бы приспособили для этой избыточности. Если вы размещаете свои материалы в облаке через сервис, такой как AWS или Rackspace, я думаю, что вы хорошо справляетесь доступность, и вы не должны беспокоиться о проблеме. Такой подход практически полностью сводит на нет преимущества кэширования активов.

Вы можете изучить следующую директиву

ActionController::Base.asset_host = Proc.new { |source, request|
  if #code to check if CDN is alive
    "CDN Url"
  else
    "/public/assets/"
  end
}