9

Estoy ejecutando Rails 3.1.3, que incluye Sprockets 2.0.3 como una dependencia.Rails asset Pipeline en la puesta en escena: huella digital correcta, pero 404ing

Configuré mi entorno de ensayo para que se configure de la manera que sugiere la guía Rails para la producción.

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = false 
config.assets.digest = true 

he incluido en mi Capfile

load 'deploy' 
load 'deploy/assets' 

y activos conseguir precompiled como se esperaba en despliegue.

En public/assets, encuentro los activos como se esperaba con las huellas dactilares.

application-bd402855d34fb61e0a1690da06f79f20.js 
application-bd402855d34fb61e0a1690da06f79f20.js.gz 
application-ed3f9a8d23992790841c11b6692fb576.css 
application-ed3f9a8d23992790841c11b6692fb576.css.gz 
...and a bunch of images... 

Cuando cargo la página, veo las referencias correctas, huella digital y todo.

<link href="/assets/application-ed3f9a8d23992790841c11b6692fb576.css" media="screen" rel="stylesheet" type="text/css"> 
<script src="/assets/application-bd402855d34fb61e0a1690da06f79f20.js" type="text/javascript"></script> 

Sin embargo, todo 404s, css, js, images, todo.

¿Alguien sabe cuál es el trato aquí? ¡Gracias!

+0

¿Estás ejecutando el montaje como 'producción' o tienes un archivo de configuración staging.rb? Si es así, es posible que no tenga las opciones correctas de interconexión allí. –

+0

El montaje se configura con las opciones de configuración anteriores, que es lo mismo que la guía de Rails sugiere para la producción. Quiero más o menos el mismo comportamiento. ¿No es eso correcto? – cotopaxi

+0

Debería estar bien. Voy a pensar en esto un poco más ... –

Respuesta

0
config.assets.compile = false 

debe ser:

config.assets.compile = true 

Además, asegúrese de borrar la memoria caché:

bundle exec rake tmp:cache:clear 

y reiniciar el servidor.

+2

La compilación sobre la marcha de los activos conduce a un peor rendimiento. – Maarten

0
config.assets.compile = false 

Debe ser verdad

1

pesar de las sugerencias en otras respuestas

config.assets.compile = true 

... es una solución, no una solución. Esta opción permite a Rails recurrir a la compilación sobre la marcha de activos que no se pueden encontrar en public/assets. Puede 'resolver' su problema en etapas, pero hacer que Rails compile los activos en tiempo de ejecución no es exactamente óptimo en producción.

Recuerdo que en los primeros meses de trabajo con la nueva cartera de activos en Rails 3.1.x tuve problemas con la compresión y generación de compendios que solo resolví realmente en versiones posteriores. Sugeriría probar

config.assets.compress = false 
config.assets.digest = false 

tanto individualmente como juntos. Y/o actualice a versiones posteriores de Rails o las gemas de canalización de activos.

0

Me encontré con el mismo problema hace unos meses. Por algunas razones, decidí ir con la activación manual de la compilación de activos en producción para mi producción.rb tiene

config.assets.compile = false 

y por el despliegue Capistrano también tiene una tarea para precompilar los activos (utilizando RVM así):

run "cd #{release_path} && RAILS_ENV=production bundle exec rake assets:precompile", shell: fetch(:rvm_shell) 

El último paso era asegurarse de que el enlace simbólico en la carpeta activos para que podamos no es necesario volver a compilar los activos que no han cambiado.

run "ln -nfs #{shared_path}/assets #{release_path}/public/assets" 
1

Si está seguro de los activos están siendo compilados y existen en el directorio público, no podía ser de la configuración del servidor web? En los entornos de producción/transición, los activos no deben llegar a la aplicación de rieles y se deben enviar directamente desde el servidor web. Aquí hay un ejemplo de fragmento de configuración de apache:

<LocationMatch "^/assets/.*$"> 
     Header unset ETag 
     FileETag None 
     # RFC says only cache for 1 year 
     ExpiresActive On 
     ExpiresDefault "access plus 1 year" 

     SetEnv no-gzip 
     RewriteEngine on 
     # Make sure the browser supports gzip encoding before we send it 
     RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b 
     RewriteCond %{REQUEST_FILENAME}.gz -s 
     RewriteRule ^(.+) $1.gz [L] 

    </LocationMatch> 

    <FilesMatch \.css\.gz$> 
     ForceType text/css 
     Header set Content-Encoding gzip 
    </FilesMatch> 

    <FilesMatch \.js\.gz$> 
     ForceType text/javascript 
     Header set Content-Encoding gzip 
    </FilesMatch> 
Cuestiones relacionadas