2012-06-26 9 views
10

Estoy tratando de asegurarme de que estoy sirviendo archivos comprimidos css y js utilizando la canalización de recursos de Rails. Lo preparé todo bien y las cosas se precompilaron felizmente, y también me sincronicé felizmente con S3, donde las estoy sirviendo con CloudFront CDN de Amazon.Manifest.yml no se está actualizando con activos: precompilación - Rails 3.2.6

estoy sirviendo el application.css y application.js así:

= stylesheet_link_tag "application" 
= javascript_include_tag "application" 

El problema, en pocas palabras: Los archivos MD5-sufijo no se emiten en el diseño de la aplicación - sólo el raw application.css y application.js

Esto se pone un poco extraño: todas las imágenes tienen una estampilla MD5. Los archivos CSS/JS no.

Aquí es mi production.config:

config.action_controller.perform_caching = true 

    # Specifies the header that your server uses for sending files 
    config.action_dispatch.x_sendfile_header = "X-Sendfile" 
    config.assets.compress = true 
    # Fallback to compile on demand 
    # config.assets.compile = true 
    #config.assets.precompile += %w(application.css application.js) 
    # Generate digests for assets URLs 
    config.assets.digest = true 
    #push the assets to amazon 
    config.action_controller.asset_host = Proc.new { |source, request| 
    if request.ssl? 
     "https://tekpub-assets.s3.amazonaws.com" 
    else 
     "http://tekpub-assets.s3.amazonaws.com" 
    end 
    } 

    config.serve_static_assets = false 

Lo exasperante de todo este proceso es que puedo ver el gzip/archivos digiere - si estuvieran allí en mi directorio activos. Todos em: los archivos CSS y JS también.

Sin embargo mi archivo manifest.yml sólo se actualiza de este modo:

--- 
application.js: application.js 
application.css: application.css 

no hay errores de compilación previa cuando corro - de hecho, todo parece bastante color de rosa:

** Invoke assets:precompile:all (first_time) 
** Execute assets:precompile:all 
** Invoke assets:precompile:primary (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment (first_time) 
** Execute environment 
Resolved collector.newrelic.com to 204.93.223.153 
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:primary 
** Invoke assets:precompile:nondigest (first_time) 
** Invoke assets:environment (first_time) 
** Execute assets:environment 
** Invoke environment (first_time) 
** Execute environment 
Resolved collector.newrelic.com to 204.93.223.153 
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb 
** Invoke tmp:cache:clear (first_time) 
** Execute tmp:cache:clear 
** Execute assets:precompile:nondigest 
AssetSync: Syncing. 
Using: Directory Search of /Volumes/Fatty/Sites/tpub6/public/assets 
AssetSync: Done. 

Gracias por cualquier punteros/empujones/consejos.

Respuesta

14

Bien, encontré la respuesta: si el inventario de activos no puede compilar un archivo (o tipo de archivo), fallará silenciosamente, en estilo Ruby/Rails.

En mi caso hubo 2 problemas: hubo un "." en un nombre de archivo js (bootstrap.min.js) - no me gustó, lo que supongo que tiene sentido, ya que utiliza nombres de archivo para averiguar cómo procesar el archivo (file.css.erb, por ejemplo).

El siguiente es un tipo de archivo que no sabe qué hacer. Debido a la ceguera y la estupidez de mover archivos, tenía un archivo YAML extraviado en mi directorio de activos/imágenes. Eso ahogó al procesador haciendo activos: la precompilación falló ... otra vez ... silenciosamente.

La forma en que descubrí esto fue crear un proyecto de Rails vacío y compilar los activos desde cero. Así es como encontré el problema del archivo JS, así como el tonto archivo YAML.

+1

Como este problema se debía a la gema 'twitter-bootstrap-rails', actualizando la gema del repositorio git con' gem 'twitter-bootstrap-rails',: git => 'git: // github. com/seyhunak/twitter-bootstrap-rails.git'' resolvió este problema para mí. – joseph

Cuestiones relacionadas