今天我正在处理我已经在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 += ...
到目前为止,我只是回滚到我上一个工作版本。我目前无法推送新代码。将设置一个临时环境(就像我应该很久以前做过的那样),但不确定下一步该做什么或者可能解决这个问题的原因是什么?为什么之前没有抛出错误?
rake assets:clean
似乎已经解决了问题,虽然我不明白为什么。有人可以对此分享一些见解吗?
答案 0 :(得分:3)
如果您运行Rails 4.0或更高版本,则rake assets:clean
已替换为rake assets:clobber
。
但是,在永久删除资产方面,目前存在一些关于干净和破坏的问题。您可以在此处关注此问题。 https://github.com/heroku/heroku-buildpack-ruby/issues/123
答案 1 :(得分:2)
我愿意打赌public / assets文件夹中manifest.yml内的编译版本/文件名已过时/错误。
如果您对flexslider.js文件进行了更改,则需要使用rake assets:precompile
重新编译并将更新后的版本推送到github。我相信你可以在manifest.yml文件中设置资产的版本。
此外,我相信您可以投放heroku run rake assets:clean
或heroku run rake assets:precompile
。
由于版本控制和名称冲突/未存储在github中,我认为在heroku中预编译资产不是一个好主意。
你可以清理heroku中的资产并再次推送repo,这样你就不需要在本地预编译并推送到github,除非在本地编译中确实存在问题。
我还需要几分钟时间阅读http://guides.rubyonrails.org/asset_pipeline.html
另一种可能性是您的文件名存在链轮问题。为什么不使用flexslider.js的开发版本,将其重命名为更方便的东西,并允许链轮进行缩小。
答案 2 :(得分:1)
在GitHub线程中找到解决方案:
增加config.assets.version变量 $ {项目根} /config/application.rb
我添加了config.assets.version =' 1.1'之后刷新了资产。在我的配置文件的末尾。