Heroku部署时预编译资产失败但在本地运行

时间:2015-03-04 00:08:33

标签: ruby-on-rails heroku sass

我最近开始尝试在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通过预编译来狂奔?

1 个答案:

答案 0 :(得分:0)

首先在本地清理资产

rake assets:clean

然后为生产环境进行预编译错误

config.assets.compile = false

然后编译本地资产

rake assets:precompile

然后推上heroku