我的计算机和使用ssh的网络服务器上都有一个网络应用程序。问题是我在我的计算机上本地开发应用程序,我想将它与服务器同步而不是通过ftp复制文件。还有其他方法吗?的git?
答案 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)
Capistrano已经扩展到部署任何类型的Web应用程序(称为rails-less deployment)。
设置完成后,工作流程如下:
cap deploy
。第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
):
首先,我建议在您的应用程序上运行capify
(给自己提供默认文件)并在测试服务器(或服务器上的测试目录)上运行它以查看它的作用。一旦你得到了部署的东西,你可以自定义它来做额外的移动/符号化。
答案 4 :(得分:0)
您还应该考虑如何发布内容......将更改的连续运行推向生产可能会导致很难在问题出现时进行跟踪。
正如其他人所提到的,您可以使用git进行同步来管理您的代码。当您有一组您认为准备好的新更改时,这些更改可以进入分支,或者至少标记它们,以便您知道哪些更改一起消失。
然后你可以将这些更改同步到一个临时目录,并在那里验证了这些更改后翻转开关。