Rake Assets: error de precompilation que empuja la aplicación de Rails a heroku

Empezaré diciendo que odio el heroku con pasión en este momento.

De acuerdo, en eso. Presioné una aplicación para heroku y obtuve el error "precompilation de activos fallidos". Probé alnetworkingedor de 100 cosas para solucionarlo, y nada funciona. He intentado configurar

config.assets.initialize_on_precompile = false 

En mi file application.rb, no funciona. Intenté precomstackr localmente, comitar y empujar, así como ocultar activos precomstackdos localmente. He intentado empujar en diferentes entornos también.

Aquí está mi logging de errores, donde las cosas comienzan a suceder:

 > Preparing app for Rails asset pipeline Running: rake assets:precompile rake aborted! SyntaxError: (erb):82: syntax error, unexpected ':', expecting ')' (erb):85: unterminated string meets end of file /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config/environment.rb:40:in `load_yaml' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config.rb:83:in `load!' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid.rb:99:in `load!' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/railtie.rb:75:in `block in <class:Railtie>' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:30:in `instance_exec' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:30:in `run' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:55:in `block in run_initializers' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/initializable.rb:54:in `run_initializers' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:300:in `initialize!' /tmp/build_1843337b33065f83ff572061af54f827/config/environment.rb:5:in `<top (requinetworking)>' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `block in require' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:232:in `load_dependency' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/activesupport-4.1.6/lib/active_support/dependencies.rb:247:in `require' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:276:in `require_environment!' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/railties-4.1.6/lib/rails/application.rb:389:in `block in run_tasks_blocks' /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/sprockets-rails-2.2.4/lib/sprockets/rails/task.rb:64:in `block (2 levels) in define' Tasks: TOP => environment 

Veo el "error de syntax" cerca de la parte superior, pero no tengo idea de qué file search. ¿Alguien puede ayudarme?

Aquí está el final de mi file mongoid.yml, de las líneas 78 a la 90

 78 staging: 79 sessions: 80 default: 81 database: <dbname> 82 hosts: 83 - <host>:<port> 84 username: <username> 85 password: <password> 86 options: 87 production: 88 sessions: 89 default: 90 uri: <%= ENV['MONGOHQ_URL'] %> 

Las primeras líneas de stacktrace te señalan el problema:

 Running: rake assets:precompile rake aborted! SyntaxError: (erb):82: syntax error, unexpected ':', expecting ')' (erb):85: unterminated string meets end of file /tmp/build_1843337b33065f83ff572061af54f827/vendor/bundle/ruby/2.1.0/gems/mongoid-4.0.0/lib/mongoid/config/environment.rb:40:in `load_yaml' 

El error ocurrió cuando Mongoid intentó cargar su configuration de YAML, mongoid.yml .

Encontrando el problema

Esto no tiene nada que ver con Heroku. La línea de mongoid.yml mencionada en stacktrace apunta a la parte de staging , y usted debería poder reproducir localmente el error ejecutando:

 bundle exec rake assets:precompile RAILS_ENV=staging 

Por cierto, ¿todavía estás ejecutando Rails 3? Porque según Heroku :

En Rails 4.x esta opción [ initialize_on_precompile ] se ha eliminado y ya no es necesaria.

La solución

Supongo que debes citar cadenas que contengan dos puntos. Debería ser:

 78 staging: 79 sessions: 80 default: 81 database: <dbname> 82 hosts: 83 - '<host>:<port>' 84 username: <username> 85 password: <password> 86 options: 87 production: 88 sessions: 89 default: 90 uri: <%= ENV['MONGOHQ_URL'] %> 

not - <host>:<port> (observe las comillas simples de arriba).