繁体   English   中英

为什么rake asset:precompile会生成一个空的CSS样式表?

[英]Why does rake assets:precompile produce an empty css stylesheet?

我正在使用sass-railshaml-rails gem,以便可以以HAML-sass样式编写css文件。

问题是,当我要进行生产并预编译样式表时,命令rake assets:precompile运行时没有错误,但是生成的application.css为空。

这是我的Gemfile:

source 'https://rubygems.org'

gem 'rails', '~>3.2'
gem 'pg', '>= 0.14'
gem 'haml-rails' #, '~> 0.3'

group :development, :test do
  gem 'factory_girl_rails'
end

group :developpement do
  gem 'rspec-rails', '>= 2.11'
  gem 'capistrano', '>= 2.12'
  gem 'faker', '>= 1.0'
  gem 'rvm-capistrano'
end

group :test do
  gem 'rspec', '>= 2.11'
  gem 'webrat', '>= 0.7'
  gem 'spork-rails', '>= 3.2'
end

group :assets do
  gem 'sass-rails',   '>= 3.2.3'
  gem 'coffee-rails', '>= 3.2.1'
  gem 'compass-rails', '>= 1.0'
  gem 'execjs'
  gem 'therubyracer', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'
gem 'annotate'
gem 'excel_rails' #, '~> 0.3'
gem 'spreadsheet' #, '~> 0.7'
gem "schema_plus", :git => "git://github.com/lomba/schema_plus.git"
gem 'ar-octopus' #, '~> 0.3'
gem 'squeel' #, '~> 1.0'
gem 'devise' #, '~> 2.1'
gem 'role_model'
gem 'declarative_authorization'
gem 'rails-translate-routes'  #, '~> 0.1'
gem 'validates_timeliness'  #, '~> 3.0'

这是我的(空)应用程序/资产/样式表/application.css.sass

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 */

我按照https://github.com/rails/sass-rails上的建议删除了以下注释行:

 *= require_self
 *= require_tree .

我的css.sass文件存储在这里:

  • 应用程序/资产/样式表/screen.css.sass
  • app / assets / stylesheets / partials /(screen.css.sass引用的许多局部文件_ *。css.sass)

===更新===

请注意,我正在使用COMPASS gem。 因此,mixin和变量需要在样式表之间共享。

以防万一,这是我的app / assets / stylsheets / screen.css.sass文件:

// This import applies a global reset to any page that imports this stylesheet.
@import blueprint/reset

// To configure blueprint, edit the partials/base.sass file.
@import partials/base

@import blueprint/interaction
@import blueprint/typography
@import blueprint/grid
@import blueprint/buttons
@import blueprint/utilities

@import compass/layout/grid-background
@import compass/typography/lists/inline-block-list
@import compass/typography/lists/horizontal-list
@import compass/utilities/general/float
@import compass/css3/border-radius
@import compass/css3/box-shadow
@import compass/css3/text-shadow
@import compass/css3/transition

@import partials/opf_mixins_et_functions
@import partials/link_icons
@import partials/typo
@import partials/application
@import partials/affichage_donnees
@import partials/tableau_edition
@import partials/page
@import partials/form
@import partials/feedback

===更新2 ===

我意识到我的Gemfile会导致我在生产中遇到麻烦,因为我将以下Gems放在了资产组中

group :assets do
  ...
  gem 'execjs'
  gem 'therubyracer', :platforms => :ruby
  ...
end

由于生产环境也需要JavaScript解释器...因此,我会将它们移到Gemfile中的任何组之外。

任何建议欢迎

建议您删除这两行,但仍然需要包括自己的文件:

*= require screen
*= require_dir partials/

但是,请注意一点:这与@import一样不起作用-您不会共享mixins和变量。 为此使用真实的@import

好的,我用以下解决方案解决了它:

遵循最后一个答案的精神,似乎在我的/app/assets/styelsheets/application.css.sass末尾添加了以下行解决了我的问题:

@import screen

屏幕将自动导入screen.css.sass引用的每个部分样式表

我的预编译资产(application.js和application.css)为空...

是什么为我解决了这个问题:

  • 在Gemfile中设置最后的rails版本(目前为3.2.14)

  • bundle update

  • bundle install

  • 重新启动应用程序, touch tmp/restart.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM