耙子流产了! 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 )
这个对我有用。