Обслуживание активов на "статическом" субдомене

Как я могу настроить рельсы для обслуживания активов в другом субдомене? Я в основном хочу, чтобы помощники view / assets использовали поддомен для всех статических файлов, таких как;

  • вместо example.com/application.css -> static.example.com/application.css
  • вместо example.com/application.js -> static.example.com/application.js
  • вместо example.com/logo.jpg -> static.example.com/logo.jpg

person Oguz Bilgic    schedule 26.01.2012    source источник
comment
Можете ли вы сказать нам, зачем вам это нужно?   -  person Nicolas Garnil    schedule 26.01.2012
comment
Я хочу использовать другую машину для обслуживания статических файлов.   -  person Oguz Bilgic    schedule 26.01.2012
comment
Для этого есть множество веских причин; это обычная картина.   -  person odigity    schedule 28.03.2014


Ответы (2)


вы знаете об опции asset_host?

# config/environments/production.rb
config.action_controller.asset_host = "static.example.com"

также возможно делать динамические имена:

ActionController::Base.asset_host = Proc.new { |source|
  "http://assets#{Digest::MD5.hexdigest(source).to_i(16) % 2 + 1}.example.com"
}

http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

person phoet    schedule 26.01.2012
comment
Отлично, так что я был не единственным, кто пытался это сделать. - person Oguz Bilgic; 26.01.2012
comment
нет, это то, что вы обычно делаете в крупных веб-приложениях - person phoet; 26.01.2012

Вы также можете попробовать rack-cors gem для совместного использования ресурсов из разных источников. https://github.com/cyu/rack-cors

Я использовал этот драгоценный камень в приложении Rails 4, когда мои значки с потрясающим шрифтом не отображались после того, как я начал использовать поддомены. Эта вики направила меня на правильный путь: https://github.com/bokmann/font-awesome-rails/wiki/CORS-Cross-Domain-Support

Помимо изменения моего Gemfile, я также поместил следующий код в config/application.rb вверх в соответствии с этим руководством: https://github.com/cyu/rack-cors/blob/master/examples/rails4/config/application.rb

config.middleware.insert_before 0, "Rack::Cors", :debug => true, :logger => (-> { Rails.logger }) do
  allow do
    origins '*'

    resource '/cors',
      :headers => :any,
      :methods => [:post],
      :max_age => 0

    resource '*',
      :headers => :any,
      :methods => [:get, :post, :delete, :put, :patch, :options, :head],
      :max_age => 0
  end
end
person chemturion    schedule 08.12.2017
comment
Как вы справились с этим на производстве? Я имею в виду, вы тоже настраивали Nginx или Apache. Я думаю, что это хорошо работает для ресурсов, когда они обслуживаются через рельсы, но когда он будет скомпилирован, нам придется настроить Nginx для работы. - person Ziyan Junaideen; 11.01.2020