Capistrano - 如果服务器版本较新,则在部署之前添加从服务器更新repo的任务

时间:2014-01-17 12:30:19

标签: git capistrano

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

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

a)通过将新文件推回到仓库来更新仓库

b)忽略(不确定原因,但这可能有用)

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

作为Capistrano和Ruby的相对新人 - 我不知道如何或是否可以这样做。

所以我的问题是:

a)一个好主意

b)可能的

c)如果(a&& b)怎么样?

(如果这个问题对于SA来说不够具体,我会道歉 - 我不知道还能在哪里问它)

2 个答案:

答案 0 :(得分:1)

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

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

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

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

所以是的,这是可能的。

你应该这样做吗?

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

希望这有帮助。

答案 1 :(得分:0)

我猜测有可能做一些capistrano魔术来更新repo(或忽略)这些文件,但是我认为'pages'实际上是你的数据。这是对的吗?

如果是这样的话,我想知道你为什么要在回购中或为什么回购已经过时呢?

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

这有帮助吗?