【问题标题】:CodeIgniter: Development and Production EnvironmentCodeIgniter:开发和生产环境
【发布时间】:2009-08-11 05:34:42
【问题描述】:

我目前正在学习 CodeIgniter PHP 框架。目前,我正在寻找一个 DEV 环境和一个 PRODUCTION 环境。来自纯 C 和 JAVA 背景,我习惯于在本地拥有一切(带有版本控制),但由于我将在网站上拥有 PRODUCTION 端,所以我想知道一些不同的事情:

  1. 将 DEV 环境保留在本地会更好吗?
  2. 在 DEV 端进行更改以将它们升级到 PRODUCTION 端(假设 DEV 环境是本地的)时,有什么好的(且简单)的方法?
  3. 是否可以(如果可以,如何设置?)将 CodeIgniter 设置为在相同的代码空间中拥有 DEV 和 PROD 环境(例如在服务器上但具有不同的数据库表)?
  4. 在我将在框架中创建的应用程序上使用版本控制时,是否建议只保留我为我的应用程序创建的文件,还是添加整个框架(以保持代码与框架版本一致)?

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

谢谢!

【问题讨论】:

    标签: php version-control codeigniter frameworks


    【解决方案1】:

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

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

    希望这些笔记对您有所帮助...
    玩得开心!

    【讨论】:

    • @PascalMARTIN 您是否在将事物部署到生产环境的每个项目旁边使用某种 bash 部署脚本? ex scp'ies 和符号链接...
    【解决方案2】:

    1) 我同意 Pascal MARTIN 的观点 - 最好让每个人都拥有自己的本地开发环境;这样他们就可以在不踩到对方脚趾的情况下玩耍。那么,这可能意味着您希望拥有某种类型的测试或暂存环境,以便团队成员(和项目利益相关者)可以看到集成的、正在进行的代码。

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2011-06-19
      • 2013-07-14
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多