我可以在不重新编译slug的情况下更新Heroku上的单个源文件吗



我正在处理一个在Heroku上托管的rails项目。我想知道是否可以在不重新启动应用程序的情况下更新一个文件。

为什么。我有一个bug,但我找不到它。它在我的本地系统上运行得很好,但在heroku上的处理过程中似乎中途停止了。

由于没有断点,我在代码中分散状态更新。(稍后删除)但在rails应用程序中添加一行代码就像五分钟的过程。

  1. 更改文件
  2. 暂存文件到git
  3. 提交文件
  4. 推git(以上都很快)
  5. 等待heroku关闭应用程序,进行看起来像gem的安装,或者至少进行gem更新
  6. 更改一些文件以反映本地url
  7. 再次启动服务

有没有一种方法可以在不运行所有其他东西的情况下推动git?也许是要添加到推送中的特殊参数?



更令人烦恼的是,我的git现在有一堆我不想让同事看到的签到单。我的目标是我自己的heroku的非生产实例(仅限测试),没有理由将所有这些尝试都包括在全局源代码管理中。

这是不可能的原因。当你推到Heroku时,他们会对你的应用程序产生"鼻涕虫"(https://devcenter.heroku.com/articles/slug-compiler)。为了提供Heroku提供的巨大可扩展性,这个段塞是只读的,这样它就可以在多个dynos上旋转,这些dynos可能分布在许多不同的物理机器上。这些dynos中的每一个都运行应用程序的一个单独实例,而路由网格确保对应用程序的请求到达正确的dynos。

现在考虑一下,如果这些实例中的任何一个是可写的,如果你运行5个dynos,你的应用程序将在5个单独的实例上运行,会发生什么?如果一个文件是写的,那么它是如何分布在你运行的dynos中的?是的,Heroku可以考虑使用某种共享文件系统来运行应用程序,但这很复杂。通过使文件系统只读(https://devcenter.heroku.com/articles/read-only-filesystem)这个问题得到了缓解。

如果你已经构建了一个应用程序并部署到Heroku,但忘记使用S3类型的潜望镜存储,你的应用程序会允许你上传文件到它(通过Ruby世界中的Paperclip等),但上传的资产只存在于收到它的dyno上,然后在部署新代码或当dyno从slug接收到最新代码时重新启动应用程序时就会丢失。

如果您正在针对Heroku进行调试,请不要忘记您有常用的git军火库git commit --amend。或者,在一个分支中工作,并将其直接部署到Heroku(git push heroku <yourbranchname>:master),然后当您隔离了问题时,重新建立基础(http://git-scm.com/book/en/Git-Branching-Rebasing)你的分支到master上,压缩你不再需要的任何提交。

XY问题

这是一个经典的XY问题。X是您的非工作代码;Y是您对不存在的Git错误功能的搜索。

Git的工作原理

Git基本上是在树级别提交工作,而不是在文件级别。作为一种过度简化,提交指向一个树,该树指向一组文件。当您推送提交时,您必须推送与该提交相关的所有对象,除非接收器上已经存在这些对象。

Heroku的工作原理

Heroku将Git存储库中的应用程序编译成一个slug。虽然您可以在编译过程中忽略某些文件,但无法避免编译段塞。这就是平台的工作方式。

如果你有一个合理的子弹大小,这不是问题;我的Heroku应用程序只需要几秒钟的编译时间。如果你的蛞蝓很大,因此需要很长时间才能编译(你声称这需要5分钟以上的时间),那么如果你试图解决"不要编译",你就有另一个XY问题了

在Heroku上调试

Heroku有很多功能和附加组件来帮助调试。这里有一个简短的清单,让你开始。

  • 交互式控制台会话
  • 测井
  • 特殊附加组件

另请参阅

  • https://devcenter.heroku.com/articles/read-only-filesystem
  • https://devcenter.heroku.com/articles/dynos#ephemeral_filesystem

这是不可能的。按照heroku的设置方式,每次你进行更改时,服务器都会重新启动。

可以。

首先,列出自上次提交以来已修改的所有文件。

git status

添加要单独提交的文件。

git add location/file_name.rbgit add location/file_name2.rb

提交您添加到推送的文件。

git commit -m "committing files one at a time or two at a time"

现在推

git push heroku

相关内容

最新更新