【问题标题】:Getting rid of old compiled assets in Rails 4 / Heroku在 Rails 4 / Heroku 中摆脱旧的编译资产
【发布时间】:2014-04-12 23:09:06
【问题描述】:

我们 Heroku 托管的 Rails 4 公共资产目录 (~/public/assets) 被多个版本的编译资产污染,包括我们很久以前删除的那些。我不知道如何摆脱它们——这让我发疯。试过了:

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

【问题讨论】:

  • 你是在本地编译资产还是 Heroku 预编译它们?
  • @SampritiPanda - Heroku 正在预编译它们
  • @Yarin:你解决问题了吗?我面临着完全相同的问题......

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


【解决方案1】:

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

您不能像您期望的那样通过heroku run bash 删除文件。这是设计使然。看看这里:https://devcenter.heroku.com/articles/how-heroku-works#dyno-manager

需要注意的重要事项:

这个 [heroku run bash] 将启动一个新的测功机
...
对一个测功机上文件系统的更改不会传播到其他测功机,也不会在部署和测功机重新启动时保持不变。

好的,这就解释了。那么,如果您无法摆脱旧资产并且rake assets:clobber 没有解决它怎么办?好吧,也许有些东西隐藏在缓存中。

这为我解决了问题:

  1. 安装 Heroku Repo 插件:https://github.com/heroku/heroku-repo
  2. 清除构建缓存:heroku repo:purge_cache
  3. 重建应用程序:heroku repo:rebuild

希望这会有所帮助;)

【讨论】:

  • 这听起来似乎很简单,但您是否尝试在推送到 Heroku 之前删除 git 中的文件?
  • 我没有在本地预编译,这意味着 /public/assets 中没有文件。因此 git 中没有 /public/assets 目录;)
  • @Tom 感谢您的更新。现在没有时间自己测试,但很高兴知道有一个解决方案。
【解决方案2】:

由于 heroku 会在生产环境中预编译您的资产文件,因此您无能为力,因为 heroku 有一个临时文件系统。

根据 Heroku

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

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

【讨论】:

  • 但问题在于,当测功机停止/重新启动时,临时文件系统没有清除文件,正如预期的那样,而是永久保留所有旧资产文件。
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
相关资源
最近更新 更多