heroku上的预编译打破,在本地工作

时间:2014-08-06 16:23:07

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

我对较少的文件进行了一些重组。一切都在本地运行(例如rake assets:precompile),但在Heroku上,我的推送失败了以下内容:

Running: rake assets:precompile
       adding placeholder
       rake aborted!
       Less::ParseError: variable @brand-primary is undefined
       (in /tmp/build_24298d78-579f-44a3-ae43-c4d82b9dde9d/app/assets/stylesheets/lectures/lectures.less)
       at /tmp/build_24298d78-579f-44a3-ae43-c4d82b9dde9d/vendor/bundle/ruby/2.1.0/gems/less-2.5.1/lib/less/js/lib/less/parser.js:604:31

经过多次讨论后,我决定删除违规文件(lectures.less)的import语句,看看接下来会发生什么。随着更改提交并推送到Github,我尝试再次推送到Heroku,并得到完全相同的错误 - 预编译现在打破了不应该再导入的文件。

下面粘贴的详细信息;谁有任何提示?我已经尝试了heroku run rake assets:cleanheroku run rake tmp:clear,但我并不期望它们能够正常工作。

我的application.css是准系统:

...
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 *= require main
 */

以前我在application.css中需要讲座文件和其他一些文件,但是把它移到了main.less。

我的main.less有剩余的导入:

@import "settings";
@import "variables";
...
@import "lectures/lectures.less";
...

相关环境设置:

development.rb

config.assets.precompile                           += %w( admin.js admin.css )
config.less.dumpLineNumbers                        = 'all'
config.assets.debug                                = true
config.serve_static_assets = true
config.assets.compile = true
config.assets.raise_runtime_errors                 = true

staging.rb

config.assets.precompile += %w( admin.js admin.css )
config.serve_static_assets = true
config.assets.compile = false
config.assets.digest = true
config.assets.version = '1.0'

相关宝石:

ruby '2.1.2'
gem 'rails', '>= 4'
gem 'less-rails', github: 'metaskills/less-rails'

1 个答案:

答案 0 :(得分:1)

我们似乎通过在production.rb中碰撞config.assets.version设置来解决问题,例如

- config.assets.version = '1.0'
+ config.assets.version = '1.1'

我一点都不清楚为什么heroku不认识这些变化以及为什么heroku run rake assets:clean没有做到这一点,但是你去了。

编辑################# 从那以后已经有一段时间了,并且为了避免定期出现这个问题,我们最终将#版本绑定到了我们的提交sha。像这样:

whatever.rb

heroku = Heroku::API.new(api_key: ENV['HEROKU_API_KEY'])
$asset_version = heroku.get_releases(ENV["HEROKU_APP_NAME"]).body[-1]["commit"]

production.rb

config.assets.version = $asset_version