我曾在一家网络开发公司工作,在那里我们有本地机器,一台临时服务器和一些生产服务器.我们在perl中处理mac并使用svn提交stage,并将perl脚本加载到生产服务器.现在我正在开发自己的项目,并希望在使用共享Web托管时找到良好的Web开发实践,而不是在基于unix的环境中工作(我可以使用perl/bash脚本/ cron作业完成所有的魔术)
所以我的问题是我的条件,它是:
我正在使用来自外部提供商的单一标准共享虚拟主机(使用ssh访问)
我正在与至少一个其他人合作,并打算使用SVN进行源代码管理
我在Windows下开发php/mysql(但是使用linux是可能的)
您建议对代码/数据的测试,部署和迁移进行哪些设置?我在本地计算机上安装了xampp服务器,但不确定哪些方法用于在Windows下迁移数据等.
我在共享托管上有一些PHP个人项目; 这里有几点想法,从我在其中一个上做的(最活跃的,需要一些至少半自动同步方式):
关于我的设置几句话:
前段时间,我在SVN上拥有一切; 现在,我正在使用集市 ; 但这个想法是完全一样的(除了有市集,我有本地历史和所有这些)
我有一个ssh访问生产服务器,就像你一样
我专门研究Linux (因此,我所做的事情可能并不像Windows一样容易)
现在,我的工作方式:
生产服务器上的所有东西(源代码,图像......)都被提交给SVN/bazarr /等等
我在本地工作,使用Apache/PHP/MySQL (我使用我偶尔在本地导入的生产数据库的转储)
我是唯一一个从事该项目的人; 对于一个由2/3开发人员组成的小团队来说,这可能是可以的,但不会更多.
我之前做过的事:
我有一些PHP脚本检查SVN服务器在"最后修订推送到生产"和HEAD之间的修改
我猜这个自制的PHP脚本看起来像你目前使用的Perl脚本^^
该脚本构建了一个要上载到生产环境的目录/文件列表
并通过FTP访问上传
这不是很令人满意(我想我的剧本中有错误;我从来没有花时间纠正这些错误) ; 并强迫我记住我上次投入生产的时间的修订号(好吧,它被脚本自动存储在一个文件中,所以不是那么难^^)
我现在应该做什么 :
当切换到集市时,我不想重写那个无论如何都不能很好地工作的脚本
我完全放弃了剧本
由于我有ssh访问生产服务器,我使用rsync从我的开发机器同步到生产服务器,当我在本地的东西被认为是稳定/生产就绪.
关于这种做事方式的几点注意事项:
我没有登台服务器:我的本地设置足够接近生产的设备
对于具有一个或两个开发人员的简单项目,没有登台服务器是可以的
如果我有一台临时服务器,我可能会选择:
当你想要登台时,对它进行"svn更新"
当它没问题时,从登台服务器启动rsync命令(这将是最新的"稳定"版本,因此可以推送到生产中)
随着更大的项目,更多的开发人员,我可能不会采用这种设置; 但我觉得这个(不是太大的)个人项目很不错.
这里唯一的"特殊",可能是"面向Linux"的是使用rsync; 快速搜索似乎表明可以在Windows上安装rsync可执行文件:http://www.itefix.no/i2/node/10650
不过,我从未尝试过.
作为旁注,这是我的rsync命令的样子:
rsync --checksum \ --ignore-times \ --human-readable \ --progress \ --itemize-changes \ --archive \ --recursive \ --update \ --verbose \ --executability \ --delay-updates \ --compress --skip-compress=gz/zip/z/rpm/deb/iso/bz2/t[gb]z/7z/mp[34]/mov/avi/ogg/jpg/jpeg/png/gif \ --exclude-from=/SOME_LOCAL_PATH/ignore-rsync.txt \ /LOCAL_PATH/ \ USER@HOST:/REMOTE_PATH/
我正在使用私钥/公钥机制,所以rsync不会要求输入密码,顺便说一句.
当然,我通常首先在"干运行"模式下使用相同的命令,以查看将要同步的内容,并使用选项" --dry-run
"
并且ignore-rsync.txt
包含我不希望被推送到生产的文件列表:
.svn cache/cbfeed/* cache/cbtpl/* cache/dcstaticcache/* cache/delicious.cache.html cache/versions/*
在这里,我只是阻止缓存目录被推送到生产 - 似乎逻辑上不发送它们,因为生产数据与开发数据不同.
(我只是注意到.svn
这个文件中还有" "...我可以删除它,因为我不再使用SVN用于该项目^^)
希望这个对你有帮助...