CodeIgniter:开发和生产环境

时间:2009-08-11 05:34:42

标签: php version-control codeigniter frameworks

我目前正在学习CodeIgniter PHP框架。目前,我正在寻找DEV环境和PRODUCTION环境。来自纯粹的C和JAVA背景,我习惯在本地拥有所有东西(使用版本控制),但由于我将在网站上有PRODUCTION方面,我想知道几件不同的事情:

  1. 将DEV环境置于本地更好吗?
  2. 在DEV端进行更改以使其进入PRODUCTION端(假设DEV env是本地的)时,有什么好的(和简单的)方式?
  3. 是否有可能(如果是这样,如何?)将CodeIgniter设置为具有DEV& PROD环境在同一代码空间中(比如在服务器上,但具有不同的数据库表)?
  4. 在我将在Framework中创建的应用程序上使用Version Control时,是否建议只为我的应用程序创建文件,或者添加整个Framework(以保持代码与Framework的版本一致)? / LI>

    我感谢你提前提出的任何想法或建议。

    谢谢!

2 个答案:

答案 0 :(得分:8)

我不使用CodeIgniter,因此我可能无法回答您的所有问题;但是,仍然有一些指示:

  • 开发环境:我喜欢每个开发人员拥有自己的环境;当它在他的机器上时,它通常更容易/更快
    • 但是,如果您的开发机器正在运行Windows,并且您的生产服务器将运行Linux,则可能会带来一些问题(这两者之间存在一些差异,例如文件名中的区分大小写)
    • 在这种情况下,只要您拥有足够强大的计算机,使用VMWare或VirtualBox运行极简主义虚拟机(上面有Linux + Apache + PHP + MySQL;代码源也在其上,通过一个桑巴舞分享)可能是一个很好的解决方案 - 这就是我半年多来做的事情,而且效果很好
  • 将更改从dev推送到prod:
    • 一种解决方案是登录生产服务器并执行“svn update”;但我真的不喜欢那个(如果某些文件已直接在生产服务器上修改 - 是的,有时会发生这种情况),您可能会遇到冲突等;这绝对不是很有趣,因为它可能会打破网站^^
    • 一个解决方案我更喜欢(需要花费更多时间进行部署,但如果你只部署,比如每周一次,那就很好 - 而且肯定更安全)是使用“svn export” “在其中一台开发机器上,创建一个tar / zip /无论存档,并将其上传到prod服务器。然后,将其解压缩到新目录;完成后,您可以更改符号链接以将根目录指向该新目录。好的方面是:你在生产服务器上保留旧的源代码,如果你部署的内容存在灾难性的问题,你只需要一个符号链接就可以改回以恢复到以前的版本 - 这有时可以节省一天的时间^ ^
    • 哦,并且,作为旁注:你应该编写一个脚本来自动为你做这件事:它会避免在第二天用手动来搞乱这一步(并且会帮助那个人这总是在假期^^)
  • 关于在两种环境中使用一个源实例:即使您计划仅为框架执行此操作,我也不建议这样做:
    • 这意味着在同一台机器上使用dev和prod,这很糟糕:如果仍然在开发脚本中的某些人变得疯狂并做坏事怎么办?如果一个开发人员在错误的目录中键入一些“rm -Rf”的kinf怎么办?
    • 你考虑过不同的数据库表(我宁愿选择不同的数据库;不同的用户,以避免任何人在错误的数据库上做任何错误的请求!),但这不是唯一的事情:临时文件怎么样?缓存,例如?
    • 我真的更喜欢完全分开的实例;即使它意味着在机器上有两次源/框架 - 我真的真的建议有两台不同的机器!
  • 关于在SVN上建立框架:
    • 你在SVN上拥有的东西越多,最简单的方法就是建立一个新的开发环境:理想情况下,只需要一个“svn checkout”,并为刚刚加入你团队的新开发者提供一个新的环境;加上Virtal Machine你可以给他(从另一台机器上复制),你可以让开发人员在几十分钟内准备好你的项目 - 这很好; - )
    • 尽管如此,在SVN中使用Framework是一个PITA来更新它:你必须删除它,替换它,重新提交它,...
    • 使用svn:externals (如果可以 - 取决于您的设置/框架),指向框架的SVN服务器本身,总是最新的可能是件好事(不要不一定指向HEAD;使用标签或分支对你来说可能已经足够了。)

希望这几个笔记有所帮助......
玩得开心!

答案 1 :(得分:1)

1)我同意Pascal MARTIN - 最适合每个人拥有自己的本地开发环境;这样他们就可以在没有踩到彼此脚趾的情况下玩耍。这可能意味着您希望拥有某种类型的测试或暂存环境,团队成员(和项目利益相关者)可以在其中查看集成的正在进行的代码。

2,3)更一般地说,这听起来像是在询问如何自动化/部署到一个或多个环境。有几种商业和开源选项可以做到这一点。我们最近开始使用Capistrano(http://www.capify.org)并对结果非常满意。它是一个ruby工具,使用ruby-on-rails-isms编写。如果你不熟悉那些(我不是),需要一点阅读和谷歌搜索才能搞清楚。但是,它的核心只是在远程服务器上定义和运行脚本的一种方法。这些脚本可用于任何类型的部署(例如,我们使用PHP)。关于卡普斯特拉诺的两件好事,可以解决你的问题:

  • 它知道版本控制;无论您使用SVN,git还是其他人,它都知道(从几个方面)从存储库中提取最新代码并执行更新远程服务器所需的任何操作。
  • 它执行事务,因此如果构建/部署过程出现问题,它可以自动回滚到以前的版本

4)这可能是简化模型;只需下载codeigniter安装并在applications /目录中编写代码即可。如果你想升级CI以利用一些新的热门功能,那么有一天这可能会很麻烦。您应该能够通过定义一个指向codeigniter的svn:external链接来解决这个问题,这样当它们更新时,它也会被转移到您的代码中。有关详细信息,请参阅:http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html