rails 3.1.0 ActionView :: Template :: Error(application.css没有预编译)

我做了一个简单的带有索引函数的页面控制器的基本rails应用程序,当我加载页面时,我得到:

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 

默认情况下,Rails假定你在生产环境中预编译了你的文件,如果你想在生产环境中使用实时编译(在运行时编译你的资源),你必须将config.assets.compile设置为true

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

在使用预编译资源时,可以使用此选项回退到Sprockets,但是有任何缺less预编译的文件。

如果config.assets.compile选项设置为false,并且缺less预编译的文件,则会收到一个“AssetNoPrecompiledError”,指示丢失文件的名称。

如果您在production.rb中将config.assets.compile设置为false,并预编译您的资产,您将在生产中获得更好的性能。 你可以预编译这个rake任务:

 bundle exec rake assets:precompile 

如果您正在使用Capistrano,2.8.0版本有一个configuration,可以在部署时处理这个问题。 有关更多信息,请参阅资产pipe道指南的“正在生产”部分: http : //guides.rubyonrails.org/asset_pipeline.html

好 – 我有同样的问题。 我不想使用“config.assets.compile = true” – 我必须将所有.css文件添加到config / environments / production.rb中的列表中:

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

然后,我不得不创build(并稍后删除)tmp / restart.txt

我一直使用stylesheet_link_tag帮手,所以我发现我需要添加的所有额外的CSS文件:

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

Capistrano用户的一个快速解决方法是将此行放到Capfile

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

对于所有正在阅读这些内容的人来说, application.css并没有问题,而是使用自定义的CSS类,例如admin.cssadmin.css等等。

解决方法是使用如上所述

 bundle exec rake assets:precompile 

而在样式表引用中只需引用application.css

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

由于资产pipe道将预编译application.css中的所有样式表。 这也在开发中发生,因此在使用资产pipe道时使用任何其他引用都是错误的。

我在开发环境中遇到了完全相同的错误。 最后,我需要做的,以解决它是添加:

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

到我的configuration/环境/ development.rb文件,它修复了它。 我在开发中关于资产的最终configuration如下所示:

 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 

我也有这个问题,试图在没有预编译的情况下运行生产,仍然会抛出未预编译的错误。 我不得不改变哪一行被评论了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) 

这是快速修复:

如果您使用的是capistrano,请将其添加到您的deploy.rb中:

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

帽子部署

我今天遇到了这个错误信息,想把这个决议发布到我的个案中。 事实certificate,我的问题是,我的一个css文件丢失了一个右大括号,这导致该文件不被编译。 如果您有一个自动化的stream程,可以为您的生产环境设置一切(包括资产预编译),那么可能很难注意到这一点。

毕竟一切都失败了

我的解决scheme是从更改布局文件

 = stylesheet_link_tag "reset-min", 'application' 

 = stylesheet_link_tag 'application' 

它的工作! (您可以将重置文件放在清单中。)

另一种方法来解决这个在Heroku:确保你的Rakefile被提交和推送。

在Heroku的服务器(只读文件系统),如果你想运行时编译的CSS(它不build议,但你可以做到这一点),确保你已经完成像下面的设置 –

 # 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 

如果你认为你遵循了一切,但仍然不吉利,只要确保/ capistrano在最后运行touch tmp / restart.txt或相当于。 我在不幸的名单,但现在:)

你可能在你正在使用的CSS中有一个syntax error

运行这个命令

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

它会给出例外,修复这一切,你们都完成了。

谢谢