Magento和Subversion(SVN)-如何开始搭建开发环境?

19
我正在开发一个Magento网站,这是我所遇到的最大型软件包。我决定建立一个适当的开发服务器并使用Subversion进行版本控制。我遇到了一些障碍,需要帮助。
到目前为止,我已经做了以下工作:
1. 在使用cPanel的主机上设置了Web托管。我的“Live”网站(mysite.com)将驻留在〜/ public_html /中。 2. 创建了指向〜/ public_html / dev / 的“Development”子域(dev.mysite.com)。 3. 在〜/ svn /内启动了一个SVN存储库。我的存储库包含文件夹分支|标签|主干。 4. 在trunk / magento下从tarball(v.1.3.2.4)导入了新鲜解压的Magento tarball到我的repo中。 5. 创建了两个数据库a. mysite_live和b. mysite_dev。 6. 从我的repo中检出了Magento代码到〜/ public_html / dev /(dev.mysite.com) 7. 运行了初始的Magento Installer程序,该程序填充了我的mysite_dev Db并创建了一些配置文件(app / etc / local.xml是我知道的唯一文件-可能还有其他文件?)。
现在我陷入了困境:
因为app / etc / local.xml文件中的配置不同,加上Magento将{{base_url}}的值存储在数据库中,所以想要使我的实时网站与我的开发网站相同并不容易。这不像从我的dev站点更新我的svn trunk然后导入/导出数据库那么简单。
随着我在这方面进展,我希望有一条简单的路径,可以通过SVN将我的开发网站上的所有内容推送到我的实时网站,并保持数据库同步,但{{base_url}}的值除外。我已经阅读了其他一些论坛帖子,提到使用svn:ignore来避免某些特定于环境的文件和目录,但不知道如何在我的实时站点上设置并确保一切都正确同步。

我应该从我的版本库中的trunk/magentoo检出基础代码副本到我的生产网站空间,然后运行安装程序,并设置svn忽略local.xml文件,假设它们除了本地差异外是相同的吗?

目前我不知道该如何继续,不愿意猜测,以免在不久的将来不得不清除所有内容并重新开始。

另外 - 我还需要为另一个子域创建一个“演示”分支的代码;以便向人们展示概念证明。也许我到达那个任务时就会一切都变得清晰明了。

简洁版 - 我如何使用SVN管理Magento开发和生产代码和数据库?

感谢大家抽出时间阅读并回复!

5个回答

21

第一件要做的事情是检查已安装程序的版本。这样,代码库中的程序副本就是您实际可以使用的工作副本。然后,您需要忽略一些文件和目录,以便可以运行其他环境。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版本检入存储库。当您切换到其他站点时,您仍需要手动进行更改,但跟踪将更加容易。

对于数据库,常见的做法是在开发环境上执行mysqldump,并将其保存在存储库中。

mysqldump -u user -p database > mysqldump.sql

您需要输入密码才能执行此命令。现在存储库中的副本是网站的完整副本。要设置另一个环境,您将检出整个代码库,然后将MySQL文件导入数据库。

请记住,当您执行此操作(以及在更新存储库中的数据库并想要在其他环境中更新更改时),您将需要更改数据库中的{base_url}和{secure_url}。我见过一些开发人员创建脚本来自动完成此操作的环境。

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

希望这可以帮助您。如果您有其他具体问题,请告诉我。

谢谢, Joe


如果您不想更改 {base_url} 和 {secure_url},则可以设置相同的虚拟主机。 - Erdal G.

9
我知道这不完全是您要求的,但我想告诉您有关我的设置,因为我认为在上线后继续同步开发数据库到生产环境是不切实际的。您可能需要对开发数据库进行测试并进行不易撤消的更改。在生产环境中构建您的内容(产品等),并偶尔将数据库复制回开发环境,我发现效果非常好。
对于我的项目,我通过从头开始安装Magento,并在以下时刻从SVN检出目录来构建我的生产环境:
/app/code/local/MyOrg
/app/design/frontend/default/myorg
/skin/frontend/default/myorg

您所做的任何定制都应该在这些目录之一中进行。

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

/app/etc/modules

只有在自己创建新模块时才需要在那里创建文件。


4
我写了Module Manager来专门解决这些问题。
我不建议将app/etc/local.xml版本化,以便每个环境都可以拥有不同的数据库凭据,但我建议使用modman版本化其他所有内容。此外,我建议让modman运行一个脚本,清除Magento缓存并应用数据库更新,例如这里找到的脚本
如果正确使用,您可以在主干上“svn commit”,然后在其他环境(包括生产环境)上运行“modman update-all”进行更新。对于1.4的更安全的更新,您可以运行
touch maintenance.flag; sleep 2; modman update-all; rm maintenance.flag

“everything else” 指的是您的代码和其他文件,如 robots.txt。Modman 可以完全消除使用 svn:ignore 的需要。 - ColinM

0

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

请注意:Magento处理app / etc文件夹中的所有*.xml文件,因此在命名时要小心。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接