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:clean
或heroku 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’后,资产被刷新了。
- 引脚中的ActiveRecord :: StatementInvalid #index显示/app/app/views/pins/index.html.erb第4行引发:
- JavaScript没有在Heroku上加载但在本地工作
- Rails Passenger Glyphicon CORS Cloudfront NGINX问题
- 如何在rails中的heroku中添加子域
- 捆绑exec与heroku – 是否有必要?
- 让ffmpeg与Heroku一起工作
- 如何在Heroku上使用postgres扩展? 以及如何处理他们的迁移?
- Heroku预编译资产失败
- Ruby on Rails,Paperclip,Heroku,GitHub和AWS – 保护密钥