rails 3.1.0 ActionView :: Template :: Error (application.css non précompilé)

J’ai créé une application de base avec un simple contrôleur de pages avec une fonction d’index et lorsque je charge la page, j’obtiens:

ActionView::Template::Error (application.css isn't precomstackd): 2:  3:  4: Demo 5:  6:  7:  8:  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400' 

Gemfile

 source 'http://rubygems.org' gem 'rails', '3.1.0' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' gem 'sqlite3' gem 'execjs' gem 'therubyracer' # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', " ~> 3.1.0" gem 'coffee-rails', "~> 3.1.0" gem 'uglifier' end gem 'jquery-rails' # Use unicorn as the web server # gem 'unicorn' # Deploy with Capistrano # gem 'capistrano' # To use debugger # gem 'ruby-debug19', :require => 'ruby-debug' group :test do # Pretty printed test output gem 'turn', :require => false end 

    Par défaut, Rails suppose que vos fichiers sont précompilés dans l’environnement de production. Si vous souhaitez utiliser la compilation en direct (comstackr vos ressources pendant l’exécution) en production, vous devez définir la propriété config.assets.comstack sur true .

     # config/environments/production.rb ... config.assets.comstack = true ... 

    Vous pouvez utiliser cette option pour revenir à Sprockets lorsque vous utilisez des ressources précompilées, mais il existe des fichiers précompilés manquants.

    Si l’option config.assets.comstack est définie sur false et qu’il manque des fichiers précompilés, vous obtiendrez un “AssetNoPrecomstackdError” indiquant le nom du fichier manquant.

    Vous obtiendrez de meilleures performances en production si vous définissez config.assets.comstack sur false dans production.rb et pré-comstackz vos ressources. Vous pouvez précomstackr avec cette tâche:

     bundle exec rake assets:precomstack 

    Si vous utilisez Capistrano, la version 2.8.0 a une recette pour gérer cela au moment du déploiement. Pour plus d’informations, reportez-vous à la section “En production” du Guide du pipeline des actifs: http://guides.rubyonrails.org/asset_pipeline.html

    OK – J’ai eu le même problème. Je ne voulais pas utiliser “config.assets.comstack = true” – Je devais append tous mes fichiers .css à la liste dans config / environnements / production.rb:

     config.assets.precomstack += %w( carts.css ) 

    Ensuite, j’ai dû créer (et plus tard supprimer) tmp / restart.txt

    J’ai toujours utilisé l’aide de stylesheet_link_tag, alors j’ai trouvé tous les fichiers css supplémentaires dont j’avais besoin d’append:

     find . \( -type f -o -type l \) -exec grep stylesheet_link_tag {} /dev/null \; 

    Un correctif rapide pour l’utilisateur capistrano est de mettre cette ligne à Capfile

     # Uncomment if you are using Rails' asset pipeline load 'deploy/assets' 

    Pour tous ceux qui lisent ceci mais qui n’ont pas de problème avec application.css et avec leurs classes CSS personnalisées, par exemple admin.css , base.css etc.

    La solution est d’utiliser comme mentionné

     bundle exec rake assets:precomstack 

    Et dans les feuilles de style, référencez simplement application.css

     <%= stylesheet_link_tag "application", :media => "all" %> 

    Comme le pipeline des actifs précomstackra toutes vos feuilles de style dans application.css. Cela se produit également lors du développement, de sorte que l’utilisation de toute autre référence est incorrecte lors de l’utilisation du pipeline de ressources.

    J’avais exactement la même erreur dans mon environnement de développement. À la fin, tout ce que j’avais à faire pour résoudre ce problème était d’append:

     config.assets.manifest = Rails.root.join("public/assets") 

    à mon fichier config / environnements / development.rb et il a résolu le problème. Ma dernière configuration en développement liée aux actifs ressemble à:

     config.assets.compress = false config.assets.precomstack += %w[bootstrap-alerts.js] #Lots of other space separated files config.assets.comstack = false config.assets.digest = true config.assets.manifest = Rails.root.join("public/assets") config.assets.debug = true 

    J’ai également eu ce problème, où essayer de s’exécuter en production sans précomstackr provoquerait toujours des erreurs non précompilées. J’ai dû changer la ligne commentée application.rb:

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

    Voici la solution rapide:

    Si vous utilisez capistrano, ajoutez ceci à votre deploy.rb:

     after 'deploy:update_code' do run "cd #{release_path}; RAILS_ENV=production rake assets:precomstack" end 

    déployer cap

    J’ai rencontré ce message d’erreur aujourd’hui et je voulais afficher la résolution de mon cas particulier. Il s’est avéré que mon problème était que l’un de mes fichiers css manquait d’une accolade de fermeture, ce qui entraînait la non-compilation du fichier. Il peut être plus difficile de le remarquer si vous avez un processus automatisé qui met tout en place (y compris la précompilation des actifs) pour votre environnement de production.

    Après tout, échoué …

    Ma solution consistait à modifier le fichier de mise en page à partir de

     = stylesheet_link_tag "reset-min", 'application' 

    à

     = stylesheet_link_tag 'application' 

    Et ça a marché! (Vous pouvez mettre le fichier de réinitialisation dans le manifeste.)

    Juste une autre façon de résoudre ce problème sur Heroku: assurez-vous que votre fichier Rakefile est validé et poussé.

    Sur le serveur heroku (système de fichiers en lecture seule), si vous voulez une compilation en cours d’exécution de css (ce n’est pas recommandé mais vous pouvez le faire), assurez-vous d’avoir effectué les réglages suivants:

     # inside config/application.rb config.assets.enabled = true config.assets.prefix = Rails.root.join('tmp/assets').to_s # If you are using sass then keep gem outside of asset group gem 'sass-rails', '3.1.4' # inside config/environments/production.rb config.assets.comstack = true 

    Si vous pensez que vous avez suivi tout ce qui est bon mais toujours malchanceux, assurez-vous simplement que vous / capistrano exécutez touch tmp / restart.txt ou équivalent à la fin. J’étais dans la liste des malchanceux mais maintenant 🙂

    Vous avez probablement une syntax error dans le css que vous utilisez.

    Exécuter cette commande

     $ bundle exec rake assets:precomstack RAILS_ENV=development --trace 

    Il donnera l’exception, corrigé cela et vous avez tous terminé.

    Merci