Magento部署的最佳实践

33

我正在考虑为一个高度定制的Magento网站设置部署流程,想知道其他人是如何做到的。

我将建立开发、UAT和生产环境。所有Magento文件都将在源代码控制(SVN)中。目前阶段,我看不到需要更改数据库的任何要求,因此3个数据库将手动维护。

具体而言,

  • 您如何应用Magento升级?(每个环境分别进行,还是在开发环境上进行,然后推出,或者放弃升级?)
  • 在每个环境中保留哪些文件/文件夹(例如magento/app/etc/local.xml)
  • 您是否限制开发人员只编辑特定的文件/文件夹?
  • 您是否限制主题设计师只编辑特定的文件/文件夹?
  • 您如何管理数据库更改?

主题设计师的文件/文件夹

设计师只能编辑以下文件夹:

app/design/frontend/your_interface/your_theme/layout/
app/design/frontend/your_interface/your_theme/template/
app/design/frontend/your_interface/your_theme/locale/
skin/frontend/your_interface/your_theme/

扩展开发者文件/文件夹

扩展开发者可以编辑以下文件夹/文件-

/app/code/local
/app/etc/modules/<Namespace>_<Module>.xml

数据库环境管理

由于商店的基本URL存储在数据库中,因此您无法只是在不同环境之间复制数据库。可选方案包括:


你可能想要从下面删除“最佳答案”,因为它甚至没有回答你的主要问题。 - Oddman
很好的观点。我认为这个答案提出了一个很好的观点,但是我乐意让投票决定答案的重要性。 - Spongeboy
没关系 - 我只是认为实际回答问题的答案,无论票数如何,都应该是“最佳答案”。如果一个答案根本不能解决问题,那么它就不是一个很好的答案 :) - Oddman
5个回答

14

我建议使用 Git 而不是 SVN。更容易进行分支和合并,这意味着您可以更顺畅地完成以下所有操作。

应用升级:在开发环境中执行此操作。创建一个分支(这就是 Git 真正优秀的地方),应用补丁文件或者更好的方法是解压新的 Magento 版本,并将其指向旧的数据库。暂时不要安装扩展。在新 Magento 安装中打开管理面板,希望一切都能正常运行。在小版本之间进行升级可能不会有问题。在所有新内容安装完毕后,您可能需要重新索引。当此过程稳定后,请提交代码,然后逐步将扩展和主题引入到分支中,在每个步骤后进行提交以证明其稳定性。

与环境相关的文件:.htaccess 和 app/etc/local.xml。我为每个环境做了一个单独的版本: local.dev.xml、htaccess-dev local.staging.xml、htaccess-staging local.production.xml、htaccess-production

...然后为每个环境创建软链接:

ln -s htaccess-dev .htaccess
cd app/etc/
ln -s local.dev.xml local.xml

等等之类的。

限制某些开发人员的访问权限:我不这样做。但是,您可以在git中开发一个部署策略,让发布经理决定什么可以进入,什么不能进入。

管理数据库更改:那是最棘手的部分。我们只是从生产中使用mysqldump,并为每个环境准备一些现成的“env-setup.sql”文件。类似于这样(您的ID可能会有所不同):

UPDATE core_config_data SET value='http://magento.dev/' WHERE config_id IN (3,4);

我通常会添加一些说明,以便将付款网关切换到测试环境,更改发送的电子邮件等。大多数这些说明都可以在core_config_data中找到。

请记住,模块通常会对数据库进行自己的更改,因此应用一个制作良好的模块通常会自动处理。无论如何,永远不要在生产环境中应用未经测试的更改,始终在本地和分段环境中进行“排练”。

您可以通过转储并加载从开发完成的任何环境中的cms_*表来获取CMS(页面和静态块)数据。

祝你好运!


你能否提供一个env-setup.sql的示例? - Joe Fletcher
3
了解,Magento会匹配并加载app/etc目录下的所有*.xml文件,因此最好将它们命名为类似于local.xml.dev的名称(或将它们放在另一个目录中)。这样它们就不会在其它环境中被加载。 - webbiedave

9

在开发Magento时,我会使用与任何Web应用程序相同的最佳实践。我还会严格避免对核心文件进行任何更改(Magento Wiki上的许多文档要求您修改核心文件)。


10
赞成“不要更改核心文件”。 - Spongeboy
1
我投了反对票,因为它根本没有回答原问题的任何要点,与其他一些答案不同。 - Oddman

7

我使用git来管理所有的Magento项目和部署。如果你使用我在github上维护的Magento镜像,合并新版本会更加容易。(GitHub Magento Mirror

至于你具体提出的问题,关于基本URL存储在数据库中的位置,请尝试以下方法:

SELECT * FROM core_config_data WHERE path = "web/secure/base_url" OR path = "web/unsecure/base_url";

@JonathanDay 有几个'magento-mirror'的仓库:https://github.com/search?q=magento-mirror&p=1&ref=searchbar&type=Repositories&l=, 虽然我不知道这些仓库如何比较/与答案中提到的那个相关。 - Halil Özgür

3

太好了!顺便说一下,除了商店之外,您还可以在网站范围内执行此操作:<websites> <your_website> <web> <unsecure> <base_url>http://whatever.url/</base_url> </unsecure> <secure> <base_url>https://whatever.url/</base_url> </secure> </web> </your_website> </websites> - workflow
@workflow 你能帮忙翻译英文版本吗?因为你说你找到了,我找不到。 - Vinu D
1
@VinuD 我也找不到了 - 我认为它可能在评论中,而且可能在迁移或其他操作中丢失了。作者指出,Magento通常会用数据库中的设置覆盖您的local.xml设置。但是,您可以使用一个技巧来指定部署的local.xml设置:为默认商店(默认范围)设置值(在db中),并将它们留空以供所有特定网站/商店/商店视图使用。现在,您可以使用local.xml来覆盖特定商店或网站的默认值,就像博客文章底部的示例一样。如果您需要了解更多信息,请与我联系。 - workflow

3
经过多次尝试和错误,我们设计出了一个适合我们的工作流程: http://www.dhmedia.com.au/blog/perfect-magento-workflow-using-git 其中包括数据库管理、所有代码都在源代码控制下(使用Git)、部署、预发布和开发站点、多个开发人员、多个环境等。
希望对某些人有所帮助!

如果您的链接已过期,如果您在此处提供答案,那将非常好。 - versedi
1
很可能是这个链接:http://doghouse.agency/article/perfect-magento-workflow-using-git - asiviero

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