Сконфигурируйте динамический assets_host в Rails 3 - PullRequest
4 голосов
/ 19 октября 2010

Я хочу, чтобы Rails 3 динамически захватывал ресурсы в зависимости от текущего домена:

mysite.com - assets.mysite.com mysite.ru - assets.mysite.ru

Возможно ли этоиз коробки?Или я должен реализовать это вручную?

Ответы [ 4 ]

12 голосов
/ 15 июня 2011

Попробуйте отправить proc в asset_host, который выдает путь к ресурсу и запрос:

config.action_controller.asset_host = proc {|path, request|
  "http://assets." << request.host
}
9 голосов
/ 30 марта 2012

Обратите внимание на ключевые отличия от других решений в решениях ниже:

  1. Использование request.domain вместо request.host, поскольку большинство хостов ресурсов будут не assets0.www.domain.com, а наоборот assets0.domain.com
  2. Использование source.dash и modulo гарантирует, что один и тот же ресурс обслуживается с одного и того же сервера активов. Это ключ к производительности страницы.
  3. Фильтрация по типу актива / пути.

Я всегда делал что-то вроде этого:

  config.action_controller.asset_host = Proc.new { |source, request|
    "http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 3)}." << request.domain # cdn0-3.domain.com
  }

Или, если у вас есть несколько хостов активов / cdn, вы можете решить, какие ресурсы обслуживать с какого хоста, вот так:

config.action_controller.asset_host = Proc.new { |source, request|
  case source
  when /^\/images/
    "http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 2)}." << request.domain # cdn0-1.domain.com
  when /^\/javascripts/, /^\/stylesheets/
    "http#{request.ssl? ? 's' : ''}://cdn#{(source.hash % 2) + 2}." << request.domain # cdn2-3.domain.com
  else
    "http#{request.ssl? ? 's' : ''}://cdn4." << request.domain # cdn4.domain.com
  end
}

Надеюсь, это поможет!

0 голосов
/ 19 октября 2010

В конфиге / средах / production.rb и т. Д.

config.action_controller.asset_host = "http://assets." << request.host
0 голосов
/ 19 октября 2010

Вы имеете в виду поддоменов ?

subdomains(tld_length = 1)

Returns all the subdomains as an array, so ["dev", "www"] would be returned for “dev.www.rubyonrails.org“. You can specify a different tld_length, such as 2 to catch ["www"] instead of ["www", "rubyonrails"] in “www.rubyonrails.co.uk“.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...