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

时间:2015-12-29 05:22:45

标签: ruby-on-rails ruby

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

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

抛出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"。 我的生产工作正常,但没有加载css。

4 个答案:

答案 0 :(得分:2)

在定义之前使用

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

好像你正在使用bootstrap-sass gem。请考虑gem的自述文件中的以下说明:https://github.com/twbs/bootstrap-sass#a-ruby-on-rails您需要将application.css重命名为application.scss并使用@import代替require

答案 1 :(得分:1)

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

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

  

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

这意味着如果您使用的是variables.sass(或类似的),则您需要重命名,或明确包含它:

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我有同样的问题 我刚刚在environment / production.rb

中添加了这两行
config.assets.compile = true
config.assets.precompile += %w( active_admin.css.scss )

它对我有用。