2013-10-03 46 views
0

这可能是一个相当基本的问题,但我并不是100%熟悉最好的Git实践。我正在开发一个定期推送更新的Web应用程序。我在本地机器上有文件,这是我编辑/开发大部分内容的地方。我有一个删除测试服务器,我在开发过程中推送文件。跨服务器的Git设置

然后我有一个实时远程生产服务器,其中包含实时应用程序。除了一个例外,所有这些文件都是相同的(期望测试服务器上有新功能)。我有一个config.php文件,它具有各种设置,如数据库连接设置,路径,API密钥等。

我在远程服务器上添加了一个.gitignore文件,告诉Git忽略config.php文件。如果我添加它,我可以稍后手动覆盖它。

我根据需要将文件上传到测试服务器,一旦一切正常,我会从github(存储所有内容)中将文件拖到活动服务器以启动文件。

这听起来是对的吗?我是错过了什么或者做错了什么。感谢帮助。

回答

0

对于您的config.php文件问题,请查看此方法,而不是将其从VCS中排除。

if ($_SERVER['SERVER_ADDR'] === 'test-machine-ip') { 
    // config here 
    $config = array(); 
} else { 
    // production or other config, you get the idea 
    $config = array(); 
} 

关于测试/现场服务器的更新;如果你有一个独立的服务器,你提到的方法应该没问题,否则你应该实现git钩子,根据你推送的特定分支自动更新,比如testingproduction

钩子可以让你有一个类似的过程:

  1. 推送到远程原点(到位桶等)
  2. 到位桶具有钩设置,POST提交数据到服务器(分支名等等)
  3. 您的脚本将读取提交并根据提交数据采取相应措施。

该方法适用于生产服务器,同时仍然使用其他方法用于通常只有一个盒子的测试服务器。大多数在线上找到的小脚本都不具备分支检测功能。

这里有一些资源,让你开始

注意的方法,自动部署是怎么做的改变。

如果你有几个生产服务器等,并且还可以免除SSH服务器执行pull操作的麻烦(尽管你可以为此编写脚本),这种方法很有用。