web-dev-qa-db-fra.com

rails 3.1.0 ActionView :: Template :: Error (application.css n'est pas précompilé)

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
281
Chris Muench

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.

313
Chris Muench

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

202
richardsun

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 \;
31
Don Law

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'
30
user673207

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.

11
Haris Krajina

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
8
darchitect

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)
5
mathdancer

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

4
fivetwentysix

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.

2
SnapShot

Un autre moyen de remédier à cela sur Heroku: Assurez-vous que votre Rakefile est engagé et poussé.

1
phillbaker

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.)

1
Victor Piousbox

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
0
Sandip Ransing

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 :)

0
Muntasim

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

0
Shoaib Malik