【问题标题】:Capistrano — add a task to update repo from server before deployment if server version is newerCapistrano - 如果服务器版本较新,则添加一个任务以在部署之前从服务器更新 repo
【发布时间】:2014-01-17 12:30:18
【问题描述】:

所以我使用 Capistrano (v2) 来部署使用 Perch (grabaperch.com) 构建的网站。当用户(在实时服务器上)在 Perch 中创建一个“页面”时,系统会创建一个实际的 .php 文件,其中包含该页面使用的任何“母版页”。显然,这会导致 repo 过期。

为了解决这个问题,我想知道是否可以使用 Capistranos 挂钩来检查服务器上文件的状态并提示用户选择:

a) 通过将新文件推回 repo 来更新 repo

b) 忽略(不知道为什么,但这可能有用)

此外,这可以(可能?)在每个文件(或文件夹)的基础上完成,以便更好地控制最终受版本控制的内容。

作为 Capistrano 和 Ruby 的新手——我不知道如何或是否可以做到这一点。

所以我的问题是:

a) 一个好主意

b) 可能

c) if (a && b) 怎么样?

(如果这个问题对 SA 来说不够具体,我深表歉意——我不知道还能在哪里问)

【问题讨论】:

  • 所以基本上你想检查生产服务器上是否有新文件不受版本控制的版本控制?
  • 是的,没错。

标签: git capistrano


【解决方案1】:

嗯,这可能是可能的,但你会非常努力地实现它。

在签出存储库的任务之前,您需要一项任务,该任务将检查 current 目录中是否有更改的文件。

您可以将git ls-files . --exclude-standard --others 用于未跟踪的文件,将git ls-files -m 用于已修改的文件,如果有输入,您必须提交这些文件并将它们推送到存储库中。 如果您在 capistrano 签出最新的master 之前完成了此操作,那么它现在将使用您的新文件签出最新的master

现在,如果您希望能够控制哪些文件添加到存储库,哪些不添加到您可以正确配置您的 .gitignore,或者您可以使用从 git ls-files 返回的输出与其他一些像highlinemaybe this will help you 这样的宝石(capistrano 曾经在 DSL 中有一个 CLI 模块,但它已经消失了)。

是的,这是可能的。

你应该这样做吗?

这取决于 Perch 是否有任何影响。 我以前从未使用过 Perch,所以我部分理解他们为什么会创建额外的文件,此外,您还必须检查已删除的文件(以防 Perch 删除用户不再使用的页面),否则您将有垃圾在你的 git 存储库中(在好的情况下),在更坏的情况下,你会有数据不一致,这是不好的。

希望这会有所帮助。

【讨论】:

  • 感谢您的回答,非常有帮助。
【解决方案2】:

我猜可以做一些 capistrano 魔术来更新 repo(或忽略)这些文件,但是我认为“页面”实际上是您的数据。对吗?

如果是这样,我想知道您为什么要将它们放在存储库中,或者为什么存储库已过时不好?

如果它们实际上是网站上的数据,我会考虑将“页面”数据指向不同的路径,然后使用 .gitignore 文件从 git 存储库中忽略它们。 .gitignore 文件是一种告诉 git 您不想在 git 存储库中包含位于您的目录下的某些文件或文件夹的方法。

这有帮助吗?

【讨论】:

  • 不,“页面”只是一个 .php 文件,其中包含该特定页面的“主模板”。这不是我的设计选择——Perch 的工作方式就是这样,我无法控制它。
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 2011-08-26
  • 2018-04-07
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多