我有一些关于共享主机的 PHP 个人项目;这里有一些想法,来自我正在做的其中一个(最活跃的一个,并且需要一些至少半自动的同步方式):
关于我的设置的几句话:
- 前段时间,我在 SVN 上拥有一切;现在,我正在使用bazaar;但想法完全一样(除了集市,我有当地历史等等)
- 我有对生产服务器的 ssh 访问权限,就像你一样
- 我专门在 Linux 上工作(所以,我在 Windows 上做的事情可能不那么容易)
现在,我如何工作:
- 生产服务器上的所有内容(源代码,图像,...)都提交给 SVN/bazarr/whatever
- 我在本地工作,使用 Apache/PHP/MySQL (我使用偶尔在本地导入的生产数据库的转储)
- 我是唯一一个从事该项目的人;对于一个由 2/3 开发人员组成的小团队来说可能还可以,但不会更多。
我之前做了什么:
- 我有一些 PHP 脚本检查 SVN 服务器是否在“最新版本推送到生产”和 HEAD 之间进行了修改
- 我猜这个自制的 PHP 脚本看起来像你目前正在使用的 Perl 脚本^^
- 该脚本构建了一个目录/文件列表以上传到生产环境
- 并通过 FTP 访问上传
- 这不是很令人满意(我想我的脚本中有错误;我从来没有花时间纠正这些错误);并强迫我记住我上次推送到生产的时间的修订号(好吧,它是由脚本自动存储在一个文件中的,所以并不难^^)
我现在应该做什么 :
- 切换到 bazaar 时,我不想重写那个脚本,反正效果不太好
- 我完全放弃了剧本
- 因为我可以通过 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 ^^)
希望这个对你有帮助...