我最近开始尝试在heroku应用程序中清理一些css,当我尝试开始使用SCSS样式变量时遇到了一些麻烦。我的方法主要是创建一个theme.css.scss文件,该文件包含所有颜色,然后在我的其他模块中使用它们。为了解释这个,我将其称为bracket.css.scss
现在我已经通过尽可能多地减少了调试来解决这个问题,问题似乎是heroku由于某种原因试图编译括号文件而没有在主题中设置变量。我已经砍掉了所有东西,所以我有以下内容:
application.css.scss
/*
*= require_self
*/
@import "theme.css.scss";
@import "bracket.css.scss";
theme.css.scss
$primary-red: #BC1414;
$faded-red: #3B1B1B;
$dark-red: #8a0f0f;
bracket.css.scss
.Bracket li {
color: $primary-red;
}
现在在本地,这一切都可以通过运行bundle exec rake assets:precompile RAILS_ENV=production RAILS_GROUPS=assets
来编译,但由于某种原因,heroku正在尝试裸编译文件。即使我从import语句中删除了bracket.css.scss并将其保留在目录中,它仍然会尝试编译它并仍然给出错误:
remote: Running: rake assets:precompile
remote: I, [2015-03-04T01:26:27.759654 #541] INFO -- : Writing /tmp/build_9a38718ecc0e6f745aaabdf36773113f/public/assets/application-06ee955f8c010c7ce7ddac90c464ee2b.js
遥控器:耙子中止了! Sass :: SyntaxError:未定义的变量:“$ primary-red”。 remote :(在/tmp/build_fc4a2b49d91462a9a653dc2e95ed1439/app/assets/stylesheets/bracket.css.scss:6)
(旁注:我确实在生产中安装了'rails_12factor'宝石)
我甚至尝试更改production.rb并将预编译列表覆盖到config.assets.precompile = ["application.js", "application.css"]
我通过本地预编译和提交来解决这个问题,但这不是我的首选方法。似乎heroku只是单独编译树中的所有内容而不是读取application.css。难道我做错了什么?有没有办法阻止Heroku通过预编译来狂奔?
答案 0 :(得分:0)
首先在本地清理资产
rake assets:clean
然后为生产环境进行预编译错误
config.assets.compile = false
然后编译本地资产
rake assets:precompile
然后推上heroku