耙子流产了! Sass :: SyntaxError:未定义的变量:“$ alert-padding”

我因为我的资产没有编译而陷入了应用程序的生产环境。 我用的时候

rvmsudo bundle exec rake assets:precompile RAILS_ENV=production --trace

它抛出rake aborted! Sass::SyntaxError: Undefined variable: "$alert-padding" rake aborted! Sass::SyntaxError: Undefined variable: "$alert-padding"

这是我的Gemfile:

  source 'https://rubygems.org' gem 'rails', '4.2.3' gem 'mysql2', '~> 0.3.11' gem 'jquery-rails' gem 'jquery-ui-rails' gem 'sass-rails', '~> 5.0' gem 'bootstrap-sass', '~> 3.2.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.1.0' gem 'jbuilder', '~> 2.0' gem 'sdoc', '~> 0.4.0', group: :doc gem 'haml' gem 'haml-rails' gem 'devise', github: 'plataformatec/devise' gem 'html2haml' gem 'simple_form' gem 'validates_formatting_of' gem 'tzinfo-data' gem 'therubyracer', platforms: :ruby gem 'twitter-bootstrap-rails' gem 'jquery-validation-rails' gem 'sprockets-rails', :require => 'sprockets/railtie' gem 'jquery-turbolinks' gem 'paperclip' gem 'fancybox-rails' gem 'css3-progress-bar-rails' group :development do gem 'spring' gem 'pry-rails' gem 'better_errors' end group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end gem 'delayed_job_active_record' # Need daemons to start delayed_job gem 'daemons' gem 'rails_config', '~> 0.4.2' gem 'cancan' gem 'two_factor_authentication' gem 'twilio-ruby' gem 'binding_of_caller' gem 'rest-client' 

这是我的porduction.rb

  Rails.application.configure do config.cache_classes = true config.eager_load = true config.consider_all_requests_local = false config.action_controller.perform_caching = true config.serve_static_files = true config.assets.js_compressor = :uglifier config.assets.css_compressor = :sass config.assets.compile = false config.assets.compress = false config.assets.digest = true config.log_level = :debug config.action_mailer.perform_deliveries = true config.action_mailer.delivery_method = :smtp config.action_mailer.raise_delivery_errors = true config.i18n.fallbacks = true config.active_support.deprecation = :notify config.action_mailer.default_url_options = { :host => Settings.PROD_URL } config.log_formatter = ::Logger::Formatter.new config.active_record.dump_schema_after_migration = false end 

和application.css:

  /* *= require_tree . *= require_self */ 

所以,为什么我得到rake aborted! Sass::SyntaxError: Undefined variable: "$alert-padding" rake aborted! Sass::SyntaxError: Undefined variable: "$alert-padding"编译时的rake aborted! Sass::SyntaxError: Undefined variable: "$alert-padding" 。 我的生产工作但没有加载到它的CSS。

$alert-padding变量在定义之前使用。 它可能是由application.css错误的css文件顺序引起的。 require_tree按字母顺序加载当前文件夹中的所有文件(我猜),但您需要按特定顺序加载某些样式。

看起来你正在使用bootstrap-sass gem。 请考虑gem的README中的以下指令: https : //github.com/twbs/bootstrap-sass#-ruby-on-rails您需要将application.css重命名为application.scss并使用@import而不是require

使用SASS您必须在调用之前包含变量。

Dir globbing / Sprockets 按字母顺序包含文件:

这存在按字母顺序排列文件的问题。 如果您的目录有jquery-ui.js和jquery.min.js,那么Sprockets在需要jquery之前需要jquery-ui.js,这将不起作用(因为jquery-ui依赖于jquery)。

这意味着如果您正在使用variables.sass (或类似),您将要重命名它,或显式包含它:

 /* *= require variables *= require_tree . *= require_self *= stub variables */ 

更好(因为你正在使用SASS ),使用@import指令:

 #app/assets/stylesheets/application.sass @import variables @import * 

如果您使用scss而不是css,只需在config / application.rb中添加这些行。

 config.assets.precompile << %w( *.scss *.js ) 

我有同样的问题,我刚刚在environment / production.rb中添加了这两行

 config.assets.compile = true config.assets.precompile += %w( active_admin.css.scss ) 

这个对我有用。