Php CodeIgniter:开发和生产环境

Php CodeIgniter:开发和生产环境,php,version-control,codeigniter,frameworks,Php,Version Control,Codeigniter,Frameworks,我目前正在学习CodeIgniter PHP框架。目前,我希望有一个开发环境和一个生产环境。来自纯C和JAVA背景,我习惯于在本地拥有一切(带有版本控制),但由于我将在网站上拥有生产端,我想知道两件不同的事情: 将开发环境保持在本地是否更好 当在开发端进行更改以使其进入生产端(假设开发环境是本地的)时,什么是一种好的(简单的)方法 是否有可能(如果有,如何设置?)将CodeIgniter设置为在相同的代码空间中(例如在服务器上,但具有不同的数据库表)具有开发和生产环境 在我将在框架中创建的应用程

我目前正在学习CodeIgniter PHP框架。目前,我希望有一个开发环境和一个生产环境。来自纯C和JAVA背景,我习惯于在本地拥有一切(带有版本控制),但由于我将在网站上拥有生产端,我想知道两件不同的事情:

  • 将开发环境保持在本地是否更好
  • 当在开发端进行更改以使其进入生产端(假设开发环境是本地的)时,什么是一种好的(简单的)方法
  • 是否有可能(如果有,如何设置?)将CodeIgniter设置为在相同的代码空间中(例如在服务器上,但具有不同的数据库表)具有开发和生产环境
  • 在我将在框架中创建的应用程序上使用版本控制时,建议只使用我为应用程序创建的文件,还是添加整个框架(以保持代码与框架版本一致)
  • 我感谢您事先提出的任何想法或建议


    谢谢

    我不使用CodeIgniter,所以我可能无法回答您所有的问题;但是,这里仍然有一些建议:

    • 开发环境:我喜欢每个开发人员都有自己的环境;当它在他的机器上时,通常更容易/更快
      • 不过,如果您的开发机器运行的是windows,而您的生产服务器运行的是Linux,这可能会带来一些问题(这两者之间有一些区别,比如文件名区分大小写)
      • 在这种情况下,如果您有一台功能足够强大的计算机,使用VMWare或VirtualBox来运行一个最低限度的虚拟机(上面有Linux+Apache+PHP+MySQL;代码源也在上面,通过samba共享导出)可能是一个很好的解决方案——这就是我半年多以来一直在做的事情,而且它工作得非常好
    • 将更改从开发人员推送到产品:
      • 一种解决方案是登录生产服务器并执行“svn更新”;但是我并不喜欢这样(如果一些文件直接在生产服务器上被修改——是的,有时会发生这种情况),您可能会遇到冲突等等;这肯定一点也不好玩,因为它可能会破坏网站^^
      • 我更喜欢的一种解决方案(部署需要更多的时间,但是如果只部署一次,比如说,一周一次,这很好——而且更安全)是在一台开发人员机器上使用“svn导出”,创建一个tar/zip/任何存档,然后将其上传到prod服务器。然后,将其解压缩到一个新目录;完成后,您可以更改一个符号链接,将根目录指向该新目录。好的一面是:您将旧的源代码保留在生产服务器上,如果您部署的内容出现灾难性问题,您只需将一个符号链接更改回以前的版本,这有时可以节省时间^^
      • 哦,还有,作为旁注:您应该编写一个脚本来自动完成这项工作:有一天手动完成这项工作时,它将避免干扰ine步骤(并将有助于在节假日总是这样做的人^^)
    • 关于在两种环境中使用一个源实例:即使您计划只在框架中使用,我也不推荐:
      • 这意味着在同一台机器上安装dev和prod,这是不好的:如果仍在开发脚本中的一些人变得疯狂并做了坏事,该怎么办?如果一个开发人员在错误的目录中键入了一些“rm-Rf”怎么办
      • 您考虑了不同的数据库表(我宁愿使用不同的数据库;使用不同的用户,以避免任何人在错误的数据库上执行任何错误的请求!),但这不是唯一的问题:临时文件呢?比如说缓存
      • 我真的更喜欢完全分离的实例;即使这意味着在机器上有两次源代码/框架——我真的建议使用两台不同的机器
    • 关于在SVN上使用框架:
      • 你在SVN上拥有的东西越多,就越容易建立一个新的开发环境:理想情况下,只需一个“SVN签出”,就可以为刚加入你团队的新开发人员准备一个新的环境;再加上你可以给他一台虚拟机器(从另一台机器上复制),你可以让开发人员在几十分钟内准备好你的项目——这很好;-)
      • 尽管如此,在SVN中使用框架是更新它的必经之路:您必须删除它,替换它,重新提交它
      • 使用svn:externals(如果可以的话——取决于您的设置/框架),指向框架的svn服务器本身,总是保持最新可能是一件好事(不一定指向头部;使用标记或分支可能对您来说已经足够了)
    希望这些笔记对你有所帮助。。。
    玩得开心

    1)我同意Pascal MARTIN的观点——最好每个人都有自己的本地开发环境;这样他们就可以玩而不用踩到对方的脚趾。因此,这可能意味着您希望有某种类型的测试或登台环境,团队成员(和项目涉众)可以在其中查看集成的、正在进行的代码

    2、3)更一般地说,听起来像是在问如何自动化/部署到一个或多个环境。有几个商业和开源选项可以实现这一点。我们最近开始使用Capistrano(),并且对结果非常满意。这是一个ruby工具,使用RubyonRails isms编写。如果你不熟悉这些(我不熟悉),那就需要一点阅读和谷歌搜索才能弄明白。然而,它的核心只是一种在远程服务器上定义和运行脚本的方法。这些脚本可以用于任何类型的部署(例如,我们使用PHP)。两件大事