【问题标题】:Best practices for Magento DeploymentMagento 部署的最佳实践
【发布时间】:2010-11-25 12:40:32
【问题描述】:

我正在寻找为高度定制的 Magento 站点设置部署过程,并且想知道其他人是如何做到这一点的。

我将设置 dev、UAT 和 prod 环境。所有 Magento 文件都将在源代码控制 (SVN) 中。在这个阶段,我看不到任何更改数据库的要求,因此将手动维护这3个数据库。

具体来说,

  • 如何应用 Magento 升级? (单独在每个 env 中,或者在 dev 上然后推出,或者只是放弃升级?)
  • 哪些文件/文件夹会在每个环境中单独保留(例如 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 存储在数据库中,因此您不能只在环境之间复制数据库。选项包括-

【问题讨论】:

  • 您可能想从下面删除“最佳答案”,因为它甚至没有回答您的主要观点。
  • 公平点。我认为这个答案很重要,但很高兴投票决定答案的重要性。
  • 不用担心 - 我只是想出真正回答问题的答案,应该是“最佳答案”,无论选票如何。如果一个答案不能以任何方式解决问题,那就不是一个很好的答案:)

标签: deployment magento


【解决方案1】:

我建议在 SVN 上使用 git。更容易的分支和合并意味着所有这些点对你来说都会更顺利。

应用升级: 在 dev.xml 中执行此操作。创建一个分支(这是 git 真正的亮点),应用补丁文件,或者更好的是,解压缩一个新的 Magento 版本并将其指向您的旧数据库。还没有扩展。在新的 Magento 安装中打开管理员,希望一切顺利。次要版本之间的升级可能不会成为问题。安装完所有新内容后,您可能必须重新编制索引。稳定后进行提交,然后逐渐将您的扩展和主题引入分支,进行任何代码调整,然后在每个步骤证明稳定后进行提交。

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

...然后为每个环境创建指向它们的软链接:

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 中找到。

请记住,模块通常会对数据库进行自己的更改,因此应用制作精良的模块通常会自行处理。在任何情况下,永远不要对 prod 应用未经测试的更改,始终在本地和暂存环境中进行“排练”。

您可以从数据库中获取 CMS(页面和静态块)数据,方法是仅转储和加载来自任何开发环境的 cms_* 表。

祝你好运!

【讨论】:

  • 您是否有机会发布您的 env-setup.sql 之一的示例?
  • 仅供参考,Magento 将所有*.xml 文件通配并加载到app/etc 目录中,因此最好将它们命名为local.xml.dev 之类的名称(或将它们放在不同的目录中)。这样它们就不会被加载到其他环境中。
【解决方案2】:

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

【讨论】:

  • 阿门“不要更改核心文件”
  • 我投了反对票,因为它没有以任何方式解决原始问题的任何要点,这与此处的其他一些答案不同。
【解决方案3】:

我使用 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 repos:github.com/…,虽然不知道所有这些与答案中提到的比较/相关。
【解决方案4】:

【讨论】:

  • 太好了!还附有英文翻译。这太棒了!顺便说一句,您也可以在网站范围内进行而不是商店:&lt;websites&gt; &lt;your_website&gt; &lt;web&gt; &lt;unsecure&gt; &lt;base_url&gt;http://whatever.url/&lt;/base_url&gt; &lt;/unsecure&gt; &lt;secure&gt; &lt;base_url&gt;https://whatever.url/&lt;/base_url&gt; &lt;/secure&gt; &lt;/web&gt; &lt;/your_website&gt; &lt;/websites&gt;
  • @workflow 既然你说你找到了英文翻译版本,你能帮忙吗?我找不到它。
  • @VinuD 也找不到它 - 认为它在评论中并且可能在移动或其他东西中丢失了。作者指出,magento 通常会用 DB 中的设置覆盖您的 local.xml 设置。但是,您可以使用一种技巧在 local.xml 中指定设置以进行部署:为您的默认商店(默认范围)设置值(以 db 为单位),并将所有特定网站/商店/商店视图的值留空。您现在可以使用 local.xml 覆盖特定商店或网站的默认值,如博客文章底部附近的示例所示。如果您需要了解更多信息,请与我联系。
【解决方案5】:

经过大量试验和错误,我们提出了一个非常适合我们的工作流程:

http://www.dhmedia.com.au/blog/perfect-magento-workflow-using-git

包括数据库管理、源代码控制下的所有代码(使用 Git)、部署、暂存和开发站点、多个开发人员、多个环境等...

希望这对某人有所帮助!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2021-03-15
  • 2012-07-02
相关资源
最近更新 更多