我对较少的文件进行了一些重组。一切都在本地运行(例如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:clean
和heroku 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'
答案 0 :(得分:1)
我们似乎通过在production.rb中碰撞config.assets.version设置来解决问题,例如
- config.assets.version = '1.0'
+ config.assets.version = '1.1'
我一点都不清楚为什么heroku不认识这些变化以及为什么heroku run rake assets:clean
没有做到这一点,但是你去了。
编辑################# 从那以后已经有一段时间了,并且为了避免定期出现这个问题,我们最终将#版本绑定到了我们的提交sha。像这样:
heroku = Heroku::API.new(api_key: ENV['HEROKU_API_KEY'])
$asset_version = heroku.get_releases(ENV["HEROKU_APP_NAME"]).body[-1]["commit"]
config.assets.version = $asset_version