Heroku资产预编译

今天我正在使用我已经在Heroku上运行了几个月的应用程序,并尝试在我的开发环境中运行一些工作:

rake assets:precompile 

当我提交更改并推送到Heroku时,我的请求中出现500个错误:

 ActionView::Template::Error (jquery.flexslider-min.js isn't precompiled): 

我有点不知所措,我尝试了一些事情:

懒惰地编译生产(我真的不想这样做):

 Bundler.require(:default, :assets, Rails.env) 

具体列出需要“预编译”的所有文件(也不是真的想要这样做,看起来效率不高):

 config.assets.precompile += ... 

到目前为止,我只是回滚到我上一个工作版本。 我目前无法推送新代码。 将设置一个临时环境(就像我早就应该做的那样),但不确定下一步该做什么或者可能解决这个问题的原因是什么? 为什么之前没有抛出错误?

UPDATE

 rake assets:clean 

似乎已经解决了问题,虽然我不明白为什么。 有人可以对此分享一些见解吗?

我愿意打赌public / assets文件夹中manifest.yml里面的编译版本/文件名是过时/错误的。

如果您对flexslider.js文件进行了更改,则需要使用rake assets:precompile重新编译rake assets:precompile并将更新后的版本推送到github。 我相信你可以在manifest.yml文件中设置资产的版本。

此外,我相信你可以运行heroku run rake assets:cleanheroku run rake assets:precompile

由于版本控制和名称冲突/未存储在github中,我认为在heroku中预编译资产不是一个好主意。

你可以清理heroku中的资产并再次推送repo,这样就不需要在本地预编译并推送到github,除非在本地编译中确实存在问题。

我还需要花几分钟时间阅读http://guides.rubyonrails.org/asset_pipeline.html

另一种可能性是您的文件名存在链轮问题。 为什么不使用flexslider.js的开发版本,将其重命名为更方便的东西,并允许链轮进行缩小。

如果您运行Rails 4.0或更高版本,则rake assets:clean已被rake assets:clobber替换rake assets:clobber

但是,在永久删除资产方面,目前存在一些关于干净和破坏的问题。 您可以在此处关注此问题。 https://github.com/heroku/heroku-buildpack-ruby/issues/123

在GitHub线程中找到了解决方案:

在$ {project-root} /config/application.rb中增加config.assets.version变量

在我的配置文件末尾添加了config.assets.version =’1.1’后,资产被刷新了。