Heroku资产预编译

时间:2013-05-30 20:03:12

标签: ruby-on-rails 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 += ...

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

更新

rake assets:clean

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

3 个答案:

答案 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:cleanheroku 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'之后刷新了资产。在我的配置文件的末尾。

相关问题