2012-03-20 21 views
16

Mi sitio web solía estar funcionando y Heroku precompilaba los activos y todo. Ahora, aparentemente de la nada, comencé a obtener rake aborted! stack level too deep en la implementación.activos de rake: precompilación no funciona en heroku

Eliminación de la línea de mi archivo *= require_tree . application.css parece solucionar el stack level too deep pero luego me sale esto:

Running: rake assets:precompile 
(in /tmp/build_b8o2t4k8frce) 
/usr/local/bin/ruby /tmp/build_b8o2t4k8frce/vendor/bundle/ruby/1.9.1/bin/rake assets:precompile:nondigest RAILS_ENV=production RAILS_GROUPS=assets 
(in /tmp/build_b8o2t4k8frce) 

Todos mis enlaces a las imágenes están rotos (estoy usando la imagen-url() en mi archivo css). ¿Cuál podría ser el problema y cómo lo soluciono?

estoy usando la pila de cedro y este es mi Gemfile:

gem 'rails', '3.1.0' 
gem 'rake', '0.8.7' 
gem 'devise' 

group :production do 
    gem 'pg' 
    gem 'thin' 
end 

group :assets do 
    gem 'sass-rails', " ~> 3.1.0" 
    gem 'coffee-rails', "~> 3.1.0" 
    gem 'uglifier' 
end 

y aquí están las versiones utilizadas por heroku:

Using rake (0.8.7) 
Using rails (3.1.0) 
Using sass (3.1.15) 
Using sass-rails (3.1.6) 

Aquí está mi archivo application.rb

if defined?(Bundler) 
    # If you precompile assets before deploying to production, use this line 
    Bundler.require *Rails.groups(:assets => %w(development test)) 
    # If you want your assets lazily compiled in production, use this line 
    # Bundler.require(:default, :assets, Rails.env) 
end 

module App 
    class Application < Rails::Application 

    # Enable the asset pipeline 
    config.assets.enabled = true 

    # Version of your assets, change this if you want to expire all your assets. 
    config.assets.version = '1.0' 
    end 
end 

Y aquí está mi archivo production.rb

# Full error reports are disabled and caching is turned on 
config.consider_all_requests_local  = false 
config.action_controller.perform_caching = true 

# Enable Rails's static asset server (Apache or nginx will not need this) 
config.serve_static_assets = true 

# Set expire header of 30 days for static files 
config.static_cache_control = "public, max-age=2592000" 

# Allow JavaScript and CSS compression 
config.assets.compress = true 

# Compress JavaScript by removing whitespace, shortening variable names, ... 
config.assets.js_compressor = :uglifier 

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = true 

# Generate digests for assets URLs 
config.assets.digest = true 

Respuesta

34

Tuve un problema similar y encontré la respuesta aquí: https://github.com/rails/sass-rails/issues/78. Básicamente, rebaja a sass-rails v3.1.4. Espero que esto ayude

+5

¡Guau, eso es todo! ¡Eso lo solucionó! La cosa es que soy un novato y pensé que esta línea 'gema 'sass-rails'," ~> 3.1.0 "' significaba que mi versión de gema estaba bloqueada, pero al parecer ese chiflado hachís (o como se llame) vamos a la gema se actualizaráY tal vez eso es lo que sucedió, quizás internamente Heroku cambió algo y de repente mi aplicación dejó de funcionar. Cosas realmente extrañas que me hicieron perder todo un día por nada. Para cualquiera que pueda terminar aquí, la solución fue cambiar esa línea a 'gema 'sass-rails'," 3.1.4 "'. – Ashitaka

+0

Gracias - GRANDE ayuda - el mismo problema, de la nada. Eso fue lo último que necesitaba ver hoy fue fracasar empujar al heroku. – jpwynn

+0

¡Por favor, toma mi voto popular! ¡Gracias! – hajpoj

1

No debería haber tenido que eliminar este *= require tree . de application.css, porque carga todos sus estilos. sólo tiene que añadir, y configurar el archivo de config/production.rb así:

config.assets.precompile = %w{application.js} 

y ejecutar RAILS_ENV activos rastrillo = Producción: precompilación

EDITAR tratan de usar esta configuración:

config.assets.digest = true 
+0

Sí, esto debería funcionar con 'require_tree', pero si lo agrego, ¡entonces obtengo el' rake abortado! nivel de pila demasiado profundo'. No tengo idea de cómo sucedió esto – Ashitaka

+0

Lo siento, olvidé copiar esa línea específica, ya estaba usando el resumen. Encontré una solución aunque no me gusta mucho – Ashitaka

0

parecer Sasuke dejó de funcionar y me quedé sin paciencia, así que decidí no volver a usarlo. En vez de hacer esto:

#theme.css.scss 
background-image:image-url('image.png'); 

Ahora simplemente estoy usando un archivo de erb:

#theme.css.erb 
background-image:url(<%= asset_path 'image.png' %>); 

acabo de perder un día entero debido a esto y no tengo ni idea de por qué, ya que estaba trabajando bien ayer . Si alguien sabe lo que causó esto y cómo puedo volver a usar sass, por favor coméntelo.

+0

Me di cuenta de que en algunos entornos con sass obtengo errores si no hay espacio entre ':' y el valor en mis instrucciones, así que en lugar de escribir algo como "background-image: image-url ('image.png') "; escriba "background-image: image-url ('image.png')" [NOTE EL ESPACIO DESPUÉS DEL ':'] –

Cuestiones relacionadas