J'ai créé une application Rails de base avec un contrôleur de pages simple doté d'une fonction d'indexation et lorsque je charge la page, je reçois:
ActionView::Template::Error (application.css isn't precompiled):
2: <html>
3: <head>
4: <title>Demo</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: </head>
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 ont été précompilés dans l’environnement de production. Si vous souhaitez utiliser la compilation en temps réel (compiler vos ressources pendant l’exécution) en production, vous devez définir le paramètre config.assets.compile sur vrai.
# config/environments/production.rb
...
config.assets.compile = true
...
Vous pouvez utiliser cette option pour revenir aux Sprockets lorsque vous utilisez des ressources précompilées, mais que des fichiers précompilés sont manquants.
Si l'option config.assets.compile
est définie sur false et qu'il existe des fichiers précompilés manquants, vous obtiendrez une "AssetNoPrecompiledError" indiquant le nom du fichier manquant.
Vous obtiendrez de meilleures performances en production si vous définissez config.assets.compile sur false dans production.rb et précompilez vos actifs. Vous pouvez précompiler avec cette tâche rake:
bundle exec rake assets:precompile
Si vous utilisez Capistrano, la version 2.8.0 propose une recette pour gérer cela au moment du déploiement. Pour plus d'informations, voir la section "En production" du Guide du pipeline d'actifs: http://guides.rubyonrails.org/asset_pipeline.html
OK - J'ai eu le même problème. Je ne voulais pas utiliser "config.assets.compile = true" - je devais ajouter tous mes fichiers .css à la liste dans config/environnements/production.rb:
config.assets.precompile += %w( carts.css )
Ensuite, j'ai dû créer (et plus tard supprimer) tmp/restart.txt
J'ai toujours utilisé l'assistant stylesheet_link_tag. J'ai donc trouvé tous les fichiers css supplémentaires que je devais ajouter avec:
find . \( -type f -o -type l \) -exec grep stylesheet_link_tag {} /dev/null \;
Une solution rapide pour les utilisateurs de 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 n’ont pas de problème avec application.css
et plutôt avec leurs classes CSS personnalisées, par exemple. admin.css
, base.css
etc.
La solution est d'utiliser comme mentionné
bundle exec rake assets:precompile
Et dans les feuilles de style, il suffit de mentionner application.css
<%= stylesheet_link_tag "application", :media => "all" %>
Étant donné que le pipeline d'actifs précompilera toutes vos feuilles de style dans application.css. Cela se produit également en développement, de sorte que l'utilisation de toute autre référence est fausse lors de l'utilisation du pipeline d'actifs.
J'avais exactement la même erreur dans mon environnement de développement. En fin de compte, tout ce que j'avais à faire pour résoudre ce problème était d'ajouter:
config.assets.manifest = Rails.root.join("public/assets")
dans mon fichier config/environment/development.rb et il a été corrigé. Ma configuration finale en développement liée aux actifs ressemble à ceci:
config.assets.compress = false
config.assets.precompile += %w[bootstrap-alerts.js] #Lots of other space separated files
config.assets.compile = 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 d'exécuter en production sans précompilation pouvait toujours générer des erreurs non précompilées. Je devais changer la ligne commentée application.rb:
# 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)
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:precompile"
end
casquette déployer
J'ai rencontré ce message d'erreur aujourd'hui et je voulais poster la résolution sur mon cas particulier. Il se trouve que mon problème était qu’il manquait une accolade fermante dans l’un de mes fichiers CSS, ce qui empêchait la compilation du fichier. Cela peut être plus difficile à remarquer si vous avez un processus automatisé qui configure tout (y compris la précompilation des actifs) pour votre environnement de production.
Un autre moyen de remédier à cela sur Heroku: Assurez-vous que votre Rakefile est engagé et poussé.
Après tout échoué ...
Ma solution a été de changer le fichier de mise en page de
= stylesheet_link_tag "reset-min", 'application'
à
= stylesheet_link_tag 'application'
Et ça a marché! (Vous pouvez mettre le fichier de réinitialisation à l'intérieur du manifeste.)
Sur le serveur heroku (système de fichiers en lecture seule), si vous voulez une compilation au moment de l'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.compile = true
si vous pensez que vous avez tout suivi correctement mais toujours pas de chance, assurez-vous simplement que vous/capistrano exécutez bien tmp/restart.txt ou l’équivalent à la fin. J'étais dans la liste des malchanceux mais maintenant :)
Vous avez probablement un syntax error
dans le fichier CSS que vous utilisez.
Exécuter cette commande
$ bundle exec rake assets:precompile Rails_ENV=development --trace
Il donnera l'exception, corrigé que et vous avez tous terminé.
Merci