2012-01-26 14 views
6

¿Cómo puedo configurar los raíles para publicar activos en diferentes subdominios? Básicamente quiero que los ayudantes de vista/activos usen el subdominio para todos los archivos estáticos, como;Activos que funcionan en el subdominio 'estático'

  • en lugar de example.com/application.css -> static.example.com/application.css
  • en lugar de example.com/application.js -> static.example.com/application.js~~V~~3rd
  • en lugar de example.com/logo.jpg -> static.example.com/logo.jpg
+0

puede decirnos por qué le gustaría para hacer tal cosa? –

+0

Quiero usar una máquina diferente para servir archivos estáticos. –

+1

Hay muchas buenas razones para hacer esto; es un patrón común. – odigity

Respuesta

14

sabe usted acerca de la opción asset_host?

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

también es posible hacer nombres dinámicos:

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

+0

Perfecto, así que no fui el único que intentó hacer eso. –

+0

no, es algo que normalmente hace en aplicaciones web a gran escala – phoet

1

También puede probar la gema rack-cors para Cross-Origin Resource Sharing. https://github.com/cyu/rack-cors

He usado esta gema en una aplicación de Rails 4 cuando mis íconos de fuente impresionante no se renderizarán una vez que comencé a usar subdominios. Este wiki me puso en el camino correcto: https://github.com/bokmann/font-awesome-rails/wiki/CORS-Cross-Domain-Support

Además de modificar mi Gemfile, yo también puse el código siguiente en config/application.rb hacia la parte superior de acuerdo con esta guía: 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 
Cuestiones relacionadas