如何将站点的开发副本合并到实时站点的更改而不会丢失新内容? -- database 领域 和 updating 领域 drupal 相关 的问题

How do I merge changes from a development copy of the site to the live site without losing new content?


40
vote

问题

中文

如何在现场生产副本的开发副本上合并工作的最佳过程?自从开发开始在最新功能开始以来,常常增加了许多新内容。和站点的大多数都会涉及数据库更改。所以复制任何新文件都很简单,但数据库呢?您如何将更改与现有的生产数据库合并,而不会失去自上次更新生产网站以来添加的新内容?有没有任何帮助的模块?

英文原文

What is the best procedure for merging work done on a development copy of a site to the live production copy? Often times there has been a lot of new content added to the site since development started on the newest features. And most additions to a site will involve database changes. So copying any new files is easy, but what about the database? How do you merge your changes with the existing production database without losing new content that was added since the last time you updated the production site? Are there any modules that help with this?

     
 
 

回答列表

16
 
vote
vote
最佳答案
 

用于内容类型,视图和结构更改的开发站点查看使用功能将数据库导出为代码。< / p>

对于内容迁移,有许多选项,但不是单个固体解决方案。一个示例是部署套件。

 

For content types, views, and structure changes on the dev site look at using Features to export the database to code.

For content migration there are many options, but not a single solid solution. One example is the Deployment suite.

 
 
 
 
2
 
vote
我在这里基本上采用了两所学校(第三所思想,做数据库差异,我不会讨论,因为复杂性很高)。

1)通过删除生产数据库,然后导入开发数据库的MySqldump。可选地,在任何硬编码的绝对链接上运行Regex查找/替换,在SQL转储中引用DEV URL的任何硬编码的绝对链接。将DEV DB导入PROD后,之后自动运行SQL语句(通常通过脚本)以便更改PROD的任何设置,而不是dev(例如,您在变量中有一些连接设置,用于连接您需要的外部系统在Prod外部系统而不是DEV版本上更改为点。

2)使用功能模块,如budda为管理员设置,并使用<一个href ="http://drupal.org/project/node_export" rel ="nofollow" > node导出模块,用于内容导出/导入与删除所有模块。所以工作流程是:

  1. 使用node_export和功能将节点/功能导出到文件
  2. 可选择(希望)版本控制
  3. 在Prod系统上加载文件
  4. 使用疏浚或管理接口加载功能
  5. 使用DRUSH DELETE-ALL或ADMAD接口删除要导入的所有节点
  6. 使用Drush Ne-Import或Admin接口从导出的节点文件中导入节点。

一个注释,我很高度建议采用标准工作流程,其中内容仅在一个方向上。 dev - &gt;刺激或刺激 - &gt;开发(我更喜欢这个)。

我已经完成了这一点,我在一些大系统上这样做,结果相当好,但总会有很多方法可以将这个苹果切片,选择哪种方式适合您。

 

I've adopted basically two schools of thought here (a 3rd school of thought, doing database diffs, I won't discuss because the complexity is quite high).

1) Deploy by dropping the production database, and importing a mysqldump of the development database. Optionally, run a regex find/replace beforehand on any hard-coded absolute links which reference the dev URL in the SQL dump. After importing the dev db into prod, automatically run SQL statements (usually via script) afterwards to change any settings that are different for prod than dev (e.g., maybe you have in variables table some connection settings for connecting to external systems that you need to change to point at prod external systems instead of at the dev version).

2) Use the Features module, as mentioned by budda, for admin settings, and use the Node Export module for content export/import in combination with the Delete All module. So workflow is:

  1. use node_export and features to export nodes/features to files
  2. Optionally (and hopefully) version control
  3. Load files on prod system
  4. Use drush or admin interface to load features
  5. Use drush delete-all or admin interface to delete all nodes of the types you want to import
  6. Use drush ne-import or the admin interface to import the nodes from the nodes file you exported.

One note, I would highly suggest adopting a standard workflow, where content goes one direction only. Either Dev -> Prod or Prod -> Dev (I prefer this one).

I've done this, and am doing this on some big systems, with fairly good results, but there will always be many ways to slice this apple, choose whichever way works best for you.

 
 
   
   
1
 
vote

直播网站复制&amp的数据库; SQL文件中的站点的开发副本(使用相同的参数&amp;两个转储的设置)。
然后,将两个SQL文件使用小的比较工具进行比较 examdiff 。它将以不同的颜色并排显示文件差异。您也可以直接跳转到差异(不滚动)。检查差异&amp;将行/编辑行添加到实时站点的SQL文件。确保该文件中没有开发环境的绝对路径/ URL。那就完成了!是时候恢复现场数据库的时间。
使您的生活更轻松:在第一步中,只转储那些改变的表。例如,如果您在开发副本中编辑了一个模块,则针对单独的表,只转储此表。如果您不确定特定表格,则整个数据库转储都很好。

 

Dump databases of live site copy & development copy of site in SQL file (use same parameters & settings for both dumps).
Then, compare both SQL files using a small comparison tool ExamDiff. It'll display file differences side-by-side with different colors. You can directly jump to the differences also (without scrolling). Examine the differences & add/edit lines to SQL file of live site. Make sure there's no absolute path/URL of development environment in that file. That's done! Time to restore the database for live site.
Make your life easier: In first step, dump only those tables which are changed. For example, if you've edited a module in development copy which targets a separate table, dump only this table. If you're not sure about particular table, whole database dump is fine.

 
 
 
 

相关问题

5  使用数据库的良好做法  ( Good practices working with databases ) 
我正在学习drupal,我想开发一个网站,主要是它的数据库。 我已经拥有数据库的扩展实体关系模型(类型的复杂)。 在创建要由drupal使用的数据库时,采取的正确方向是什么,创建它手动,并使用php在drupal中进行查询,因为它是从头开始的php + mysql站点? Drupal是否提供了更容易的方法来做这件事?...

1  自定义SQL:NodeReference Joins和最新视频  ( Custom sql nodereference joins and latest vid ) 
我有一个构成自定义SQL查询的时间。 查询有多个Nodereference,需要返回最新的节点修订版。 我理解得很好,但由于某种原因,返回最新版本的额外复杂性正在绊倒我。 我宁愿通过创建视图并以编程方式执行它们,仅仅因为 WHERE 条款的复杂性,就会以编程方式执行它们。 我已经尝试翻译等同的视图的输出,但是对视图粘...

20  如何使用带有自定义表的数据与寻呼机进行排序表?  ( How do you make sortable tables with a pager with data from a custom table ) 
对于Drupal 6,您可以做到这样的事情: $header = array( array('data' => t('Order id'), 'field' => 'order_id'), ... array('data' => t('Transaction time'), 'field' => 'p...

17  是否可以恢复删除的节点?  ( Is it possible to restore a deleted node ) 
虽然保留了修订,但很容易回到先前的节点修订,我想知道是否可以恢复用户真正删除的节点? ...

14  NoSQL与其他SQL Drupal Setups  ( Nosql vs other sql drupal setups ) 
在Drupal中运行NoSQL(Ex MongoDB)的优点是在MySQL,Postgre SQL或MSSQL上运行?从简单地使用存储或某些Drupal配置需要改变的优势是有效的吗? ...

69  鉴于db_select比db_query慢得多,我为什么要使用它?  ( Given that db select is much slower than db query why would i want to use it ) 
在此背景下,请参阅 http://drupal.org/node/1067802 给出了所有这些,存在哪些情况,其中我可能想要使用db_select(),或者我应该只依靠db_query依赖于db_query? ...

-1  什么时候应该将“可翻译”标记添加到查询中?  ( When should the translatable tag be added to a query ) 
我注意到Drupal Core函数使用以下代码: $categories = db_select('contact', 'c') ->addTag('translatable') ->fields('c', array('cid', 'category', 'recipients', 'selected'...

3  将SQL-Table显示为名单  ( Displaying sql table as a paginated list ) 
我正在尝试以下内容,它有效: my.module: function my_menu() { $items['page_example'] = array( 'title' => 'Page Example', 'description' => 'Page ...

8  db_affected_rows在drupal 7 for db_query  ( Db affected rows in drupal 7 for db query ) 
我刚注意到 @berdir非常好,从Drupal 7 删除 db_affected_rows 。我现在想知道现在可以在数据库中更改了任何内容的查询是否在数据库中更改了什么。 典型的usecase是。 db_query(...); if (!db_affected_rows()) { db_query(...)...

0  Drupal 7:将外部SQL-Table显示为名单  ( Drupal 7 displaying external sql table as paginated list ) 
以下代码适用于显示Drupal用户的名字列表: function generate_list() { $query = db_select('users', 'u') ->extend('PagerDefault') ->fields('u', array('name', 'uid')) ...

3  在Drupal开发一个网站在模块中弄得一团糟..有更好的方法吗?  ( Developing a site in drupal made a mess in modules is there better way ) 
当我在Drupal开发一个网站时,我测试了几个模块,看看最适合我的需求。问题是,如果是一个大站点,我发现自己有很多模块和修补程序(禁用/卸载),仍然存在于模块文件夹中。有很多没有卸载功能的模块;结果是,我在数据库中获得许多未使用的表,以及许多用于删除的文件。 是否有更好的解决方案,或方法进行测试模块? ...

4  如何测试MySQL连接  ( How to test a mysql connection ) 
如何测试活动MySQL连接?我正在尝试将一个站点移动到Windows平台,MySQL连接失败; db_query() 返回 FALSE 。 我不确定如何使用 drupal_test_mysqli() 。 ...

4  自定义模块的MSSQL或SQL Server包装器?  ( Mssql or sql server wrapper for custom module ) 
我正在编写一个自定义模块,我需要访问当前存储在MSSQL数据库中的数据。如果我可以使用内置的数据库抽象层,但显然是不可能的。 是否有任何模块或资源,为MSSQL提供了类似的抽象层? 如果不是,我怎么样写自己的?我觉得只是在模块中直接置于模块中的连接和查询字符串,似乎是如此..陈旧。 ...

4  单个SQL查询以从每个节点类型拉出最近的两个节点  ( Single sql query to pull recent two nodes from each node type ) 
如标题中所述,我想知道如何通过单个SQL查询实现这一点。所有我需要的是节点表中的节点ID与给定的条件匹配。 ...

1  使用db_select()添加节点字段以查询;  ( Adding node fields to query with db select ) 
我正在使用 db_select(); 立即构建查询,现在我需要通过使用字段添加的字段来对我的结果进行排序。有没有比加入Field_Data_Field_FieldName和修订版的更好的方法? 我希望类似于 $query->addFieldData("field_foo", "myfoo"); 所以我可以简单地 $...

3  存储在cck日期的格式是什么?  ( What format are cck dates stored in ) 
在什么格式 cck日期存储?如果它使用时间戳字符串在数据库中存储日期而不是本机MySQL DateTime格式,这在UNIX时期之前的日期涵盖了哪些含义?它是否意味着CCK日期字段将无法存储1939年的某些事情,例如? ...

1  多个主要键  ( Multiple primary keys ) 
我已经定义了一个新的内容类型, 99887660 和cck字段, state 。 我需要在此表中使用CCK字段作为主键,因为我有另一个表,我需要使用该字段作为外键。 (此代码和表格不是drupal,我自己写了它,但它使用drupal表。)我应该将状态字段更改为"StateType" 表中的主键,但Drupal已定义 ...

5  更好的网站和数据库性能  ( Better site and database performance ) 
我正在努力在一个Drupal社区网站上,我想问一些事情: 如何使Drupal网站更安全? 如何在网站上有很多访客和用户时,我的网站尽可能快地工作,同时与数据库有很多互动?如何在这种情况下维护数据库一致? 如何在高服务器负载期间配置Drupal进行工作?如何将服务器的硬件配置为在高负载时刻工作? ...

2  数据库大小,开发的建议>暂存>生产[关闭]  ( Database size suggestions on dev staging production ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭上个月。 ...

12  用户表中的“init”和“邮件”字段  ( Init and mail fields in the users table ) 
"init" 和"电子邮件" 字段之间有什么区别? mail varchar(64) User's e-mail address. init varchar(64) E-mail address used for initial account creation. ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.