生产和开发环境同步

时间:2009-12-20 19:02:11

标签: git development-environment sync production-environment

我的计算机和使用ssh的网络服务器上都有一个网络应用程序。问题是我在我的计算机上本地开发应用程序,我想将它与服务器同步而不是通过ftp复制文件。还有其他方法吗?的git?

5 个答案:

答案 0 :(得分:8)

您没有指定涉及哪些操作系统或语言,因此很难具体说明。

Git(以及SVN和Mercurial等)非常适合版本控制,但保持系统同步通常需要的不仅仅是版本控制。如果您是Python类型的人,您可能会喜欢阅读Tools of the Modern Python Hacker: Virtualenv, Fabric and Pip。这说明不仅要保存代码,还要保持整个环境的同步。

为了简单地保持两个系统上的文件同步,我建议rsync。我将它用于各种任务,包括在一台机器上以及在机器之间备份/同步目录。我们在SoCal有一个客户,我们正在进行3级备份策略(现场2个,场外1个)超过5TB的数据,其核心是rsync和rsnapshot

评论更新:

您的网站写入的内容并不重要,您仍然需要确保所有的更改都能用于生产。这通常是一个多步骤的过程。 Fabric专门设计用于封装这些步骤并将它们减少为单个命令。 Pip和virtualenv在捕获额外的库更改等方面更具有Python特性,但Ruby / Rails可能具有相同的功能。我们的目标是拥有从dev到staging所需的单个命令所有,以及从登台到生产的另一个命令。

请注意:直接从您的开发机器自动同步到您的生产目录中。始终首先转到生产计算机上的中间登台目录 。几乎可以肯定的是,这两台机器没有100%完全相同的环境,并且在dev上工作的东西可能在生产机器上根本不起作用。你最好花一两分钟来测试一下,而不是让你的整个生产站点出现500错误。

答案 1 :(得分:3)

您应该从源代码存储库中为开发和生产版本提供自动构建。

您还应该有一个自动脚本,可以在开发和生产环境中进行部署。

然后,要部署到生产环境,只需检查您的开发代码,运行构建脚本,然后运行生产部署脚本即可。

无论您使用何种软件/环境/工具,都可以使用。

答案 2 :(得分:2)

通常希望为您的开发环境保留git

您的构建将构建一些可部署的(可能是一个{。tar.gz),方法是指定要构建的标记(以便您的构建经过审核并可重复),然后使用{将其复制到服务器中{1}} / ssh

我不会只是从开发环境同步。你想要开发中的东西,你正在试验的东西,支持工具和文件等。

答案 3 :(得分:2)

最初为部署Rails应用程序而构建的

Capistrano已经扩展到部署任何类型的Web应用程序(称为rails-less deployment)。

设置完成后,工作流程如下:

  1. 编辑程序源。
  2. 签入您的更改并将其推送到中央存储库(git / mercurial / svn / whatever)
  3. 在您的计划上运行cap deploy
  4. 第3步是魔术发生的地方,这就是Capistrano的目标。 Capistrano将从存储库中检出您的代码的新副本,将该代码复制到新的“发布”目录(名称类似于20091028230834,时间戳),最后将目录current链接到您的最新复制。在中间,如果存在迁移,它可能会运行迁移。你留下了这样的目录设置:

    ...deploy-to-path/current  ->  ./releases/20091028230834
    ...deploy-to-path/releases/
        20091028230834/
        20091028225623/
        ...    # You can configure the number of releases kept after deployment.
    ...deploy-to-path/shared/
        cached-copy/  # A cached copy of your repository, which Capistrano updates
        ...           # Any shared data, like file uploads, for your application.
    

    Capistrano的文档不是很好。他们真的需要有人一起来写下来。但基本上,您正在做的是使用以下信息编写文件(deploy.rb):

    • 服务器在哪里? (例如www.example.com)
    • 你的ssh凭据是什么? (用户,密码)
    • 您的代码存储在哪里? (您的存储库URL)
    • 您希望服务器上的代码在哪里?

    首先,我建议在您的应用程序上运行capify(给自己提供默认文件)并在测试服务器(或服务器上的测试目录)上运行它以查看它的作用。一旦你得到了部署的东西,你可以自定义它来做额外的移动/符号化。

答案 4 :(得分:0)

您还应该考虑如何发布内容......将更改的连续运行推向生产可能会导致很难在问题出现时进行跟踪。

正如其他人所提到的,您可以使用git进行同步来管理您的代码。当您有一组您认为准备好的新更改时,这些更改可以进入分支,或者至少标记它们,以便您知道哪些更改一起消失。

然后你可以将这些更改同步到一个临时目录,并在那里验证了这些更改后翻转开关。