我是一名使用django自行开发的网站开发人员,我正试图了解如何使用mercurial部署网站。我想拥有的是能够保留一个可用于生产和开发工作的存储库。生产/开发之间总会存在一些差异(例如,他们可能使用不同的数据库,开发将始终打开调试)但总的来说它们将是同步的。我也希望能够直接在生产服务器上进行更改(整理html或css,简单的错误修正等)。
我打算使用的工作流程如下:
注意:只要将更改移植到dev中,您也可以直接进行更改。
此工作流程的缺点是,无论何时进行更改,您不仅必须将其提交到您进行更改的任何分支,还必须将其移植到其他分支。有没有更合理的方式来做我想要的事情,也许使用补丁?或者失败了,有没有办法让提交过程自动将变更集自动移植到另一个分支,这会是一个好主意吗?
答案 0 :(得分:5)
我可能会使用Mercurial Queues来做这样的事情。将主存储库保留为开发版本,并使用for-production
补丁对生产进行必要的更改。
答案 1 :(得分:2)
以下是两种可能的解决方案,一种使用mercurial,另一种不使用mercurial:
答案 2 :(得分:2)
我用本地设置解决了这个问题。
附加到settings.py:
try:
from local_settings import *
except ImportError:
pass
touch local_settings.py
^local_settings.py$
添加到您的.hgignore
我所做的每个部署都有自己的本地设置(通常是不同的数据库内容和不同的原始电子邮件地址)。
PS:稍后才阅读“javascript部分的缩小版”。为此,我建议使用更新后挂钩和配置设置(如JS_EXTENSION)。
示例(从我的头顶开始!未经测试,必要时进行调整):
settings.py
文件中; local_settings.py
文件中; <script type="text/javascript" src="blabla.js"></script>
至:
<script type="text/javascript" src="blabla{{JS_EXTENSION}}"></script>
*.raw.js
并生成.mini.js
(原始的缩小版本); .mini.js$
添加到您的.hgignore
答案 3 :(得分:1)
也许尝试这样的事情:(我只是考虑这个问题,在我的情况下,它是一个sqlite数据库)
settings.py
添加到.hgignore,以使其远离存储库。settings.py
个文件,并将其移至两个单独的文件settings-prod.py
和settings-dev.py
如果您有其他几个文件,请为它们执行相同的操作。如果你有很多文件,但它们都在同一个目录中,你可以创建一对目录:production
和development
,然后将相应的一个复制或符号链接到一个deploy
目录。
如果你做了这样的事情,你可以省去分支你的存储库的需要。
答案 4 :(得分:1)
我实际上是使用命名分支和直接合并而不是移植(这是更可靠的IMO)。这通常有效,但有时候(当你编辑了另一个分支上的不同文件时),你需要注意不要在合并时再次删除差异。
如果你没有太多改变不同的文件,它会很有效。