Rails - Heroku无法编译sass

时间:2015-02-08 14:03:27

标签: ruby-on-rails ruby-on-rails-4 heroku sass

当Heroku尝试编译我的Rails应用程序的资产时出现错误:

remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        Sass::SyntaxError: Undefined variable: "$btn-default-border".
remote:        (in /tmp/build_8402012299c8c367a1dc15dd7f5cd85f/app/assets/stylesheets/auctions.css.scss:42)
remote:        /tmp/build_8402012299c8c367a1dc15dd7f5cd85f/app/assets/stylesheets/auctions.css.scss:42

当我在本地运行rake assets:precompile时,它可以正常工作。

这是我的application.css.scss

/*
 *
 *= require bootstrap-datepicker3
 */
@import "variables"; 
@import "bootstrap-sprockets";
@import "bootstrap";
@import "auctions";

auctions.css.scss

.form-control-feedback {
    pointer-events: all;

    &:hover {
        cursor:pointer;
        border: 1px solid $btn-default-border;
        background: $gray-lighter;
        border-radius: 5px; 
    }
}

为什么它在本地工作但不在Heroku上工作? Heroku是否试图在没有其他依赖项的情况下编译auctions.css.scss

3 个答案:

答案 0 :(得分:2)

尝试在Rails.application.config.assets.version中碰撞config/initializers/assets.rb

在我的应用程序清单文件中将Sprockets require切换为@import行之后,我就遇到了与Heroku同样的问题。 (我遇到CSS规则优先级的问题,并意识到我做错了。本文指导我更好的约定:https://content.pivotal.io/blog/structure-your-sass-files-with-import

我通过碰撞Rails.application.config.assets.version中的config/initializers/assets.rb来修复它。

Bumping the version促使我的应用程序重新处理所有资产文件,这似乎重置了对某些文件及其对变量的依赖性的理解。

答案 1 :(得分:0)

确保production.rb具有以下代码或者添加它

 # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
    config.assets.precompile += %w( *.css *.js )

答案 2 :(得分:0)

转到文件config/initializers/assests.rb

添加行或更新。 Rails.application.config.assets.precompile += [/.*\.js/,/.*\.scss/]

然后跑 bundle exec assets:precompile