Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deployment Magento部署的最佳实践_Deployment_Magento - Fatal编程技术网

Deployment Magento部署的最佳实践

Deployment Magento部署的最佳实践,deployment,magento,Deployment,Magento,我正在为高度定制的Magento站点设置部署过程,我想知道其他人是如何做到这一点的 我将设置dev、UAT和prod环境。所有Magento文件都将在源代码管理(SVN)中。在这个阶段,我看不到任何更改数据库的要求,因此3个数据库将手动维护 具体来说, 如何应用Magento升级?(在每个环境中单独部署,或者在开发中部署,或者干脆放弃升级?) 在每个环境中,哪些文件/文件夹是单独存在的(例如magento/app/etc/local.xml) 您是否限制开发人员编辑特定的文件/文件夹 您是否限

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

我将设置dev、UAT和prod环境。所有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
/app/code/local
/app/etc/modules/\ ux.xml

数据库环境管理

由于存储库的基本URL存储在数据库中,因此不能仅在环境之间复制数据库。选择包括-

  • 在php中重写基本url
  • 复制后更改数据库中的基本url。(这个存放在哪里?)
  • 执行MySQLDump或备份,然后对SQL文件中的URL执行替换

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

我使用git管理所有magento项目和部署。合并新版本要容易得多,特别是如果您使用我在github上维护的Magento镜像。()

对于有关基本url在数据库中存储位置的特定问题,请尝试以下方法:

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

您可以避免DB操纵(德语):
我建议使用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可能会有所不同):

我通常会添加更多的说明,将支付网关更改为测试环境,更改发送的电子邮件,等等。其中大部分内容都可以在core_config_数据中找到

请记住,模块通常会对数据库进行自己的更改,因此应用一个制作良好的模块通常会自行处理。在任何情况下,都不要将未经测试的更改应用于prod,始终在本地和登台环境中进行“预演”

通过从任何环境开发中转储和加载CMS_*表,您都可以从数据库中获取CMS(页面和静态块)数据


祝你好运

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

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


希望这对别人有帮助

同意“不要更改核心文件”,我否决了这一条,因为它没有以任何方式解决原始问题的任何问题,与这里的其他一些答案不同。您是否有可能发布一个您的env setup.sql?仅供参考,Magento将所有
*.xml
文件放在
app/etc
目录中并加载,因此最好将它们命名为
local.xml.dev
(或者将它们放在不同的目录中)。这样它们就不会被加载到其他环境中。@JonathanDay有一些
magento mirror
repos:,但不知道所有这些与答案中提到的一个相比/有什么关系。你可能想从下面删除“最佳答案”,因为它甚至不能回答你的要点。公平点。我认为这个答案很有意义,但很高兴投票决定答案的突出性。不用担心——我只是认为,不管投票结果如何,真正回答问题的答案应该是“最佳答案”。如果一个答案在任何方面都不能解决问题,那就不是一个很好的答案:)太好了!还有一个英文翻译附件。这太棒了!顺便说一句,您也可以在网站范围内进行,而不是在商店进行:
http://whatever.url/                                                    https://whatever.url/                                          
@workflow既然你这么说,你能帮我翻译一下英文版本吗
UPDATE core_config_data SET value='http://magento.dev/' WHERE config_id IN (3,4);