Magento& Subversion(SVN) - 开始开发环境?

时间:2010-01-13 17:00:35

标签: svn magento development-environment

我正在建立一个Magento网站,这是迄今为止我曾经使用过的最庞大的软件包。我决定建立一个合适的开发服务器并使用Subversion进行版本控制。我遇到了几个障碍,需要一些帮助。

到目前为止我做了什么:

  1. 在使用cPanel的主机上设置网络托管。我的“直播”网站(mysite.com)将驻留在〜/ public_html /.
  2. 创建了一个指向〜/ public_html / dev /.
  3. 的'开发'子域(dev.mysite.com)
  4. 在〜/ svn /中启动了SVN存储库。我的repo包含文件夹分支|标签|中继线。
  5. 将一个刚刚解开的magento tarball(v.1.3.2.4)导入我的主干/ magento回购中。
  6. 创建了两个数据库a。 mysite_live和b。 mysite_dev。
  7. 检查了我的仓库中的magento代码到〜/ public_html / dev /(dev.mysite.com)
  8. 跑出最初的Magento安装程序,它填充了我的mysite_dev Db并创建了一些配置文件(app / etc / local.xml是我所知道的唯一一个 - 可能还有其他人吗?)。
  9. 这就是我被困的地方

    所以我在我的开发空间中有一个功能齐全的Magento Install。我现在要做的是将我的实时站点部署到我的开发站点,作为起点。因为app / etc / local.xml文件中的配置不同;加上Magento将{{base_url}}的值存储在数据库中,这并不像从我的开发站点更新我的svn trunk,然后导出/导入数据库那么容易。

    随着我的进一步发展,我希望有一条直接的路径通过SVN和我的实时网站推送我的开发网站上的所有内容,同时保持数据库同步,除了{{{{ BASE_URL}}。我在其他地方读过一些使用svn引用的论坛帖子:忽略以避免某些特定于环境的文件和目录,但不知道如何在我的实时网站上设置并确保一切都正确同步。

    我应该从我的repo到我的实际站点的空间查看trunk / magentoo的基本代码副本,然后运行安装,然后设置svn忽略local.xml,并假设它们是相同的,除了地方差异?

    此时我只是不知道如何继续,并且我不愿意做出任何猜测,以防它不得不擦掉所有东西并在不久的将来重新开始。

    作为旁注 - 我还需要为另一个子域创建代码的'Demo'分支;向人们展示作为概念验证。当我来到它时,我可能只是穿过那座桥。也许在我完成这项任务时,这一切都有意义。

    tl; dr版本 - 如何使用SVN管理Magento开发和实时代码以及Db?

    感谢大家花时间阅读和回复!

5 个答案:

答案 0 :(得分:21)

首先要检查已安装的程序版本。这样,repo中程序的副本就是一个可以实际使用的工作副本。然后,您将需要忽略一些文件和目录,以便您可以运行其他环境。 local.xml是一个很好的例子,但也可以忽略以下内容:

/var/report/*
/var/log/exception.log
/var/log/system.log
/var/locks/*
/var/session/*
/var/cache/*
/var/tmp/*
/media/tmp/*

可能有其他人,但这应该会给你一个良好的开端。如果您认为可以对local.xml进行更改(并且可能),请将local.xml复制到local.xml.dist并将.dist版本检查到repo中。当您结帐到其他网站时,您仍然需要手动进行更改,但更容易跟踪。

对于数据库,通常的做法是在dev环境中执行mysqldump并将其保留在存储库中。

mysqldump -u user -p database > mysqldump.sql

您必须输入该密码。现在,repo中的副本是该站点的完整副本。要设置另一个环境,您将检查整个代码库,然后将MySQL文件导入数据库。

请记住,当您执行此操作时(以及任何时候在repo中更新数据库,然后想要更新其他环境中的更改),您将需要更改数据库中的{base_url}和{secure_url}。我已经看到了开发人员创建脚本以自动完成此操作的一些环境。

最后,尝试对您网站的开发副本进行所有更改,因为这有助于保持数据库同步。如果您对实时副本进行更改而至少也没有在dev中反映它们,您可能会在以后使用其中一个转储意外覆盖它们,然后想知道您的功能在哪里。

希望有所帮助。如果您有其他具体问题,请与我们联系。

谢谢, 乔

答案 1 :(得分:9)

我意识到这不是你要求的,但只是想告诉你我的设置,因为我认为一旦你上线就继续将开发数据库同步到生产是不切实际的。您可能希望对您的开发数据库进行更改以进行测试,这些更改并不总是很容易恢复。在实时环境中构建您的内容(产品等),偶尔将数据库复制回开发,我发现效果非常好。

对于我的项目,我通过从头开始安装Magento来构建我的实时环境,并在这些点上检查了SVN的目录:

/app/code/local/MyOrg
/app/design/frontend/default/myorg
/skin/frontend/default/myorg

您所做的任何自定义都应位于其中一个目录中。

我在实时服务器上手动管理此目录:

/app/etc/modules

如果您自己创建新模块,则只需要在那里创建一个文件。

答案 2 :(得分:4)

我专门写了Module Manager来解决这些问题。

我不建议对app / etc / local.xml进行版本控制,以便每个环境可以拥有不同的数据库凭据,但我建议使用modman对其他所有内容进行版本控制。另外,我建议让modman运行一个脚本来清除Magento的缓存并应用the one found here等数据库更新。

如果使用得当,您可以“svn”提交到您的主干,只需在您的其他环境(包括直播)上运行“modman update-all”即可更新。为了更安全地更新1.4,您可以运行

touch maintenance.flag; sleep 2; modman update-all; rm maintenance.flag

答案 3 :(得分:0)

我们使用的是不同的local.xml文件。命名取决于您,但建议使用具有环境特定连接字符串的local.xml.qa或local.xml.live: - )

一个注意事项:magento处理app / etc文件夹中的所有* .xml文件,因此在命名时要小心

答案 4 :(得分:0)

Here is the bash script有助于为Magento项目设置svn:ignore属性值。