NameError - 未初始化的常量 Sass::Engine:

Posted

技术标签:

【中文标题】NameError - 未初始化的常量 Sass::Engine:【英文标题】:NameError - uninitialized constant Sass::Engine: 【发布时间】:2016-11-03 11:52:56 【问题描述】:

当我使用 sass gem 运行我的 sinatra 应用程序时,我收到 NameError - uninitialized constant Sass::Engine:。 使用 rbenv 安装了 ruby​​ 版本 2.3.1,还安装了 sinatra、sass gem。

require 'sinatra'
require 'slim'
require 'sass'  # required sass
require 'sinatra/reloader' if development?

get '/styles.css' do
    scss :styles #does not generate styles.css, styles.scss file is in /views folder
end

get '/' do
    slim :home
end

get '/about' do
    @title = "All About This Website"
    slim :about
end

get '/contact' do
     slim :contact #, :layout => :special
end

not_found do
   slim :not_found
end

get '/fake_error' do
   status 500
   "There's nothing wrong, really :P"
end

完全错误:

/home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/tilt-2.0.5/lib/tilt/sass.rb:13:in prepare' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/tilt-2.0.5/lib/tilt/template.rb:92:in initialize' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:862:in new' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:862:in block in compile_template' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/tilt-2.0.5/lib/tilt.rb:104:in block in fetch' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/tilt-2.0.5/lib/tilt.rb:103:in fetch' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/tilt-2.0.5/lib/tilt.rb:103:in fetch' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:841:in compile_template' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:822:in render' /home/tasqyn/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sinatra-1.4.7/lib/sinatra/base.rb:687:in scss' main.rb:7:in `block in'

我做错了什么?

这里是styles.scss:

$red: #903;
$black: #444;
$white: #fff;
$main-font: Helvetica, Arial, sans-serif;

body 
  font-family: $main-font;


h1 
  color: $red;
  font: 32px/1 $main-font;


header h1 
  font-size: 40px;
  line-height: 80px;
  background: transparent url(/images/logo.png) 0 0 no-repeat;
  padding-left: 84px;


@mixin tabs ($background: blue, $color: yellow) 
  ul 
    list-style: none;
    margin: 0;
    padding: 0;
    background: $background;
    overflow: hidden;
  

  li 
    float: left;
  

  a 
    text-decoration: none;
    display: block;
    padding: 8px;
    background: $background;
    color: $color;
    &:hover 
      background: darken($background, 20%);
    
  


nav 
  @@include tabs($background: $black, $color: $white);
  font-weight: bold;


p 
  font: 13px/1.4 $main-font;

【问题讨论】:

【参考方案1】:

执行以下步骤:

    将此 gem 添加到您的 gem 文件 gem 'bootstrap-sass'gem 'sass-rails'

    然后使用bundle OR bundle install 命令安装包

【讨论】:

【参考方案2】:

确保您的 gemfile 中有:

gem 'sass'
gem 'sass-rails'

如果没有,请添加它。不要忘记运行捆绑安装。

【讨论】:

但它是 sinatra 而不是 rails,sass gem 是否需要 sass-rails gem? 是的,然后在控制台上手动执行 gem install 'sass-rails' 还必须添加 require 'sass-rails'。【参考方案3】:

如果您将资产管道与sinatra 一起使用,那么这可能会有所帮助。对于那些使用导轨的人来说,这可能会有所帮助。

在我的场景中,(运行 rails 3.2.22.2)在我的应用程序工作的一台机器上。 在另一台机器上,我克隆了 repo 并遇到了uninitialized constant Sass::Engine 错误。

移动 gem sass-rails 对我不起作用

我将gem 'sass-rails' 移出group :assets do 块。 这对我不起作用。

我的解决方案:

rake assets:clean 删除所有已编译的资产。

下次您运行 rake rails s 时,您的资产将被重新编译。 如果没有,您可以运行 rake assets:precompile 来编译所有资产。 或者,如果您通过 capistrano 进行部署,deploy.rb 将运行“deploy:assets:precompile”并为您的生产/登台机器编译资产。

这个错误似乎是因为 sass 没有在资产管道中正确编译。 (如果有人有答案,很想知道为什么会发生这种情况)

【讨论】:

我建议运行rake assets:clean RAILS_ENV="development" 以确保。

以上是关于NameError - 未初始化的常量 Sass::Engine:的主要内容,如果未能解决你的问题,请参考以下文章

Rails:NameError:未初始化的常量

未初始化的常量 Twitter (NameError)

Mongoid:未初始化的常量(NameError)

NameError 未初始化常量 Model::Object

未初始化的常量 OpenSSL (NameError)

未初始化的常量 ActionDispatch::Session::EncryptedCookieStore (NameError)