Rails: изображения на одном сервере, CSS и Javascript на другом - PullRequest
2 голосов
/ 14 сентября 2010

Я работаю над приложением rails, в котором есть куча (сотни) изображений, которые размещены на сервере S3.Чтобы помощники, такие как image_tag, указывали здесь, мне пришлось добавить это в config / environment / development.rb test.rb и production.rb:

config.action_controller.asset_host = "http://mybucket.s3.amazonaws.com"

Однако это также означает, что он ищет там CSSJavascript.Это огромная боль, потому что каждый раз, когда я меняю CSS, мне приходится заново загружать его в Amazon.

Итак. Есть ли простой способ заставить мое приложение выглядеть в Amazon для изображений, но локально для CSS / Javascript?

(я использую Rails 3.0)

Ответы [ 2 ]

6 голосов
/ 14 сентября 2010

Вы можете передать объект Proc в config.action_controller.asset_host и получить от него программный результат во время выполнения.

config.action_controller.asset_host = Proc.new do |source|
  case source
  when /^\/(images|videos|audios)/
    "http://mybucket.s3.amazonaws.com"
  else
    "http://mydomain.com"
  end
end

но если оставить все как есть, это даст вам http://mybucket.s3.amazonaws.com/images/whatever.png при использовании image_tag :whatever.

Если вы также хотите изменить путь, вы можете сделать что-то очень похожее с config.action_controller.asset_path

config.action_controller.asset_path = Proc.new do |path|
  path.sub /^\/(images|videos|audios)/, ""
end

что даст вам http://mybucket.s3.amazonaws.com/whatever.png в сочетании с первым.

0 голосов
/ 14 сентября 2010

Ничто не мешает вам передать полный URL-адрес на image_tag: image_tag("#{IMAGE_ROOT}/icon.png").

Но для меня перемещение статических изображений (иконки, фоны и т. Д.) На S3 и оставление файлов стилей / js на рельсах звучитвроде как противоречивоВы можете переместить их все на S3 или настроить Apache для кэширования (если вы боитесь, что пользователи, тянущие большие изображения, создадут слишком много накладных расходов для Rails).

Кстати, вам не нужно ставить config.action_controller...в конфигурационные файлы для всех трех сред: размещение этой строки в config/environment.rb будет иметь тот же эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...