281 votes

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

J'ai fait une application de rails de base avec un simple contrôleur de pages avec une fonction d'index et quand 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
 

313voto

Chris Muench Points 2078

Par défaut Rails suppose que vous avez vos fichiers précompilés dans l'environnement de production, si vous voulez utiliser le live de la compilation (compile vos actifs au cours de l'exécution) en production, vous devez définir la config.les actifs.compiler en vrai.

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

Vous pouvez utiliser cette option pour revenir à Pignons lorsque vous utilisez précompilés actifs, mais il manque des fichiers précompilés.

Si config.assets.compile option est définie sur false et il manque des fichiers précompilés, vous obtiendrez un "AssetNoPrecompiledError" en indiquant le nom du fichier manquant.

202voto

richardsun Points 2627

Vous obtiendrez de meilleures performances en production si vous définissez config.assets.compile sur false dans production.rb et précompiliez 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 a une recette pour gérer cela au moment du déploiement. Pour plus d'informations, reportez-vous à la section "En production" du Guide Pipeline d'actifs: http://guides.rubyonrails.org/asset_pipeline.html

31voto

Don Law Points 479

OK - j'ai eu le même problème. Je n'ai pas voulu utiliser "config.assets.compile = true" - j'ai dû ajouter tous mes fichiers .css à la liste dans config / environments / production.rb:

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

Ensuite, j'ai dû créer (et ensuite supprimer) tmp / restart.txt

J'ai toujours utilisé l'assistant stylesheet_link_tag, donc j'ai trouvé tous les fichiers CSS supplémentaires que j'avais besoin d'ajouter avec:

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

30voto

user673207 Points 1302

Une solution rapide pour l'utilisateur de Capistrano est de mettre cette ligne à Capfile

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

8voto

darchitect Points 91

J'avais exactement la même erreur dans mon environnement de développement. À la fin, tout ce que je devais faire pour le réparer était d'ajouter:

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

à mon fichier config / environments / development.rb et il l'a corrigé. Ma dernière config en développement liée aux actifs ressemble à:

 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X