在Rails 4 / Heroku中删除旧的编译资产

时间:2014-04-12 23:09:07

标签: ruby-on-rails heroku ruby-on-rails-4 asset-pipeline

我们的Heroku托管的Rails 4公共资产目录(~/public/assets)受到多个编译资产版本的污染,包括我们很久以前删除的版本。我无法弄清楚如何摆脱它们 - 它让我疯狂。尝试:

  1. heroku run rake assets:clean
  2. heroku run rake assets:clobber
  3. 在Heroku上运行bash会话并单独删除它们,甚至删除整个~/public/assets/目录,但是当我再次使用另一个bash会话登录时,它们仍然存在!

2 个答案:

答案 0 :(得分:2)

好的,伙计们。我现在明白了这个问题,以防它帮助其他人:

您无法按照预期的方式通过heroku run bash删除文件。这是设计的。看看这里:https://devcenter.heroku.com/articles/how-heroku-works#dyno-manager

重要的是要注意:

  

这[[{1}}]会启动一个新的dyno
  ...
  对一个dyno上的文件系统的更改不会传播到其他dynos,并且不会在部署和dyno重新启动时保持不变。

好的,这解释了。那么,如果您无法摆脱旧资产并heroku run bash无法解决问题该怎么办?好吧,也许某些东西隐藏在缓存中。

这为我解决了这个问题:

  1. 安装Heroku Repo插件:https://github.com/heroku/heroku-repo
  2. 清除构建缓存:heroku repo:purge_cache
  3. 重建应用:heroku repo:rebuild
  4. 希望这会有所帮助;)

答案 1 :(得分:0)

由于heroku正在生产中预编译资产文件,因此heroku有一个短暂的文件系统,所以你无能为力。

根据Heroku

  

每个dyno都有自己的短暂文件系统,并带有最近部署代码的全新副本。在dyno的生命周期中,其运行进程可以将文件系统用作临时暂存器,但是任何其他dyno中的进程都不会看到所写的文件,并且在dyno停止或重新启动时,所写的任何文件都将被丢弃。

因此,您在heroku的文件系统上所做的每一项更改都会被删除。