2012-04-06 14 views
14

Soy relativamente nuevo en RoR y tengo curiosidad acerca de por qué Rails compila activos con y sin hash md5 para producción.Rails compila activos con y sin md5 hash, ¿por qué?

corro bundle exec rake assets:clean continuación bundle exec rake assets:precompile

Mi archivo production.rb:

MyApp::Application.configure do 

    # Code is not reloaded between requests 

    config.cache_classes = true 

    # Full error reports are disabled and caching is turned on 

    config.consider_all_requests_local  = false 

    config.action_controller.perform_caching = true 

    # Disable Rails's static asset server (Apache or nginx will already do this) 

    config.serve_static_assets = false 

    # Compress JavaScripts and CSS 

    config.assets.compress = true 

    # Don't fallback to assets pipeline if a precompiled asset is missed 

    config.assets.compile = false 

    # Generate digests for assets URLs 

    config.assets.digest = true 

    config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

    config.assets.precompile += %w(tos.js, tos.css) 

    config.i18n.fallbacks = true 

    config.active_support.deprecation = :notify 

end 

Mi aplicación funciona con archivos con los hashes en sus nombres y es la manera que debe ser en mi caso :)

Tengo dos preguntas aquí:

1) ¿Por qué ocurre cuando se compila?

rieles compila activos con y sin hash MD5 para la producción

2) ¿Cuáles son estos archivos (sin hashes) para?

Quizás no obtenga algo, así que por favor alguien podría explicarlo.

Respuesta

14

La razón por la que lo hace es para acceder a los archivos sin conocer la huella dactilar MD5 (por ejemplo, en una aplicación sin rieles, o un archivo dentro de la aplicación de rieles que no se compila o ejecuta la pila de rieles (por ejemplo, una página de error de estado 500/502). En este caso, tendría que compilar los activos y luego cambiar los enlaces css/js en los archivos HTML estáticos cada vez que actualizó el código (causando un cambio en el hash MD5).

Así que en lugar carriles produce 2 copias de cada archivo activo, una con la huella digital en el nombre de archivo, la otra sin (por ejemplo, aplicación 731bc240b0e8dbe7f2e6783811d2151a.css, y application.css). la versión huellas digitales es obviamente preferido (ver 'what is fingerprinting and why should I care 'en el rails asset pipeline guide). Pero el no-digerir la versión ed está ahí como una alternativa.

Como reflexión final sobre el asunto, leería la siguiente solicitud de extracción al repositorio git de rails: https://github.com/rails/rails/pull/5379 donde están discutiendo los pros y los contras de los nombres de archivo no digeridos, y la posibilidad de poder para desactivar la compilación de ellos.

HTH

+0

Hola Chris, gracias por su respuesta y explicación, pensé que tengo alguna mala configuración que causó este comportamiento. Si esto es como debería ser, entonces está bien para mí. Gracias de nuevo. –

+1

Por otro lado, la instalación de mi Rails tiene exactamente la misma configuración que la suya, pero SOLO compila elementos con la huella digital y no está compilando las versiones sin la huella dactilar. Esto es muy molesto por las razones enumeradas por Chris Bailey. ¿Alguna idea de cómo puedo solucionar esto? – NudeCanalTroll

+2

@NudeCanalTroll: no está ejecutando 'activos de rake: precompilación: nondigest'. – jpatokal