Rails资产在推送到生产时没有编译

时间:2014-08-19 14:21:25

标签: ruby-on-rails ruby asset-pipeline precompile-assets

我正在尝试将rails应用程序部署到生产环境中,并且我正在尝试预编译所有资产:

我的assets.rb文件:

Rails.application.config.assets.precompile += %w( *.css.sass )
Rails.application.config.assets.precompile += %w( *.css.scss )
Rails.application.config.assets.precompile += %w( *.css )
Rails.application.config.assets.precompile += %w( *.js )
Rails.application.config.assets.precompile += %w( *.js.coffee )
Rails.application.config.assets.precompile += %w( *.js.coffee.erb )

但是,当我尝试使用capistrano进行部署时,出现以下错误:

DEBUG[c79c6191]     rake aborted!
DEBUG[c79c6191]     Sass::SyntaxError: Undefined variable: "$alert-padding".

在我之前的assets.rb文件中,我已经逐个文件地添加了每个资产,并且部署工作正常,但是,我正在布局文件中导入一些资产:

<%= javascript_include_tag 'application', 'jquery-ui-1.9.2', 'js-example', 'js-example2', 'data-turbolinks-track' => true %>

但我也使用链轮导入一些:

//= require jquery
//= require bootstrap-sprockets
//= require angular
//= require jquery_ujs
//= require turbolinks
//= require_tree .

这个方法在我开发应用程序时运行良好,但是当我将应用程序部署到生产环境时,似乎我使用链轮导入的东西没有被导入(即Angular)

提前致谢。

编辑:根据要求,我的application.css.scss文件:

/*
 *
 *= require_tree .
 *= require_self
 */

@import "bootstrap-sprockets";
@import "bootstrap";
@import "font-awesome";

EDIT2:我也遵循了这个方法:bootstrap-sass: Undefined variable: "$baseLineHeight",但我需要它来预编译所有资产。

3 个答案:

答案 0 :(得分:2)

这是你的错误:

Sass::SyntaxError: Undefined variable: "$alert-padding".

可能的原因是bootstrap您已将其列入文件顶部:

//= require bootstrap-sprockets

-

<强> SCSS

我建议问题是你没有使用SCSS preprocessor调用文件,或者你正在调用的bootstrap gem有什么问题

looked around online,我建议如下:

#app/assets/stylesheets/application.css.scss
@import "bootstrap-sprockets", "bootstrap";

-

<强>预编译

我会删除assets.rb文件中的所有来电:

Rails.application.config.assets.precompile += %w( *.css.sass )
Rails.application.config.assets.precompile += %w( *.css.scss )
Rails.application.config.assets.precompile += %w( *.css )
Rails.application.config.assets.precompile += %w( *.js )
Rails.application.config.assets.precompile += %w( *.js.coffee )
Rails.application.config.assets.precompile += %w( *.js.coffee.erb )

无论如何都会调用所有这些 - 您无需在assets.rb初始化程序中重新确认它们

答案 1 :(得分:1)

我遇到了同样的问题,我通过删除

来修复它
.mycab-top {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
.mycab-top img {
  margin-bottom: 30px;
}
.mycab-top div:nth-child(2) {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: justify;
  -webkit-justify-content: space-between;
      -ms-flex-pack: justify;
          justify-content: space-between;
}
.mycab-top div:nth-child(2) img:nth-child(1) {
  margin-bottom: 30px;
}

.mycab-top-background {
  overflow: hidden;
  background-size: cover;
  background-position: center;
  background: url(http://res.cloudinary.com/dsie3eeqb/image/upload/v1454572255/mycab1-lg_g9s5vs.jpg) no-repeat;
  background-size: 100%;
  background-position-x: -15px;
}

来自initializers / assets.rb

的上一行

我希望这会对某人有所帮助

答案 2 :(得分:0)

您使用的是什么版本的链轮?我遇到了类似的问题,不得不使用2.11.0来使其正常工作。我认为使用bootstrap和最新版本的sprockets存在某种问题。