Стратегии развертывания БАЗЫ ДАННЫХ Drupal?

Я думаю, хотите ли Вы использовать дополнительные методы, необходимо использовать GroupJoin

var query =
    people.GroupJoin(pets,
                     person => person,
                     pet => pet.Owner,
                     (person, petCollection) =>
                        new { OwnerName = person.Name,
                              Pet = PetCollection.Select( p => p.Name )
                                                 .DefaultIfEmpty() }
                    ).ToList();

, который Вам, вероятно, придется играть вокруг с выражением выбора. Я не уверен, что это дало бы Вам, хотят Вас, хотят в случае, где у Вас есть 1-many отношения.

я думаю, что это немного легче с синтаксисом Запроса LINQ

var query = (from person in context.People
             join pet in context.Pets on person equals pet.Owner
             into tempPets
             from pets in tempPets.DefaultIfEmpty()
             select new { OwnerName = person.Name, Pet = pets.Name })
            .ToList();

14
задан Community 23 May 2017 в 12:30
поделиться

3 ответа

Есть ли другой способ синхронизировать мою базу данных и базу данных сервера? особенно с учетом того, что пользователи будут постоянно публиковать новые данные?

У нас повсюду большая распределенная команда и редакционный персонал, поэтому развертывание базы данных невозможно.

Чтобы обойти это, мы широко используем функции обновления. У нас есть модуль, у которого нет реального кода, который мы используем для обновления настроек. Каждый раз, когда разработчик вносит изменения в конфигурацию, он записывает функцию обновления в этом модуле, которая при запуске внесет соответствующие изменения в другие базы данных разработки, промежуточные и живые.

Есть проблемы, особенно с перекрестными зависимостями (если люди пишут функции обновления более чем в одном модуле), и может потребоваться время, чтобы закодировать что-то, что является относительно незначительным изменением в админке. Установите api профиля , чтобы помочь в этом.

Например,

function mysite_update_6000() {
  install_include(array('user'));
  $editor_rid = install_add_role('editor');
  install_add_permissions(DRUPAL_ANONYMOUS_RID, array('do something'));
  install_add_permissions($editor_rid, array('do something', 'administer nodes'));
  return array();
} 

Добавит роль и назначит ей некоторые разрешения. При этом сохраняются все изменения в коде, поэтому вам не нужно пытаться переносить и синхронизировать базы данных.

Существует также модуль миграции , который может помочь с этим, он регистрирует изменения в таблицы и сохраняет их в функцию обновления. Его не следует путать с модулем миграции drupal.org, который предназначен для миграции контента.

У нас есть некоторый успех, но также есть некоторые проблемы с модулем features , который может помочь с переносом функций.

Существует также модуль миграции , который может помочь в этом, он регистрирует изменения в таблицах и сохраняет их в функции обновления. Его не следует путать с модулем миграции drupal.org, который предназначен для миграции контента.

У нас есть некоторые успехи, но также есть некоторые проблемы с модулем features , который может помочь с переносом функций.

Существует также модуль миграции , который может помочь в этом, он регистрирует изменения в таблицах и сохраняет их в функции обновления. Его не следует путать с модулем миграции drupal.org, который предназначен для миграции контента.

У нас есть некоторый успех, но также есть некоторые проблемы с модулем features , который может помочь с переносом функций.

13
ответ дан 1 December 2019 в 13:33
поделиться

For smaller projects, we still do something similar to your current procedure in that we lock the live instance to read only by blocking all users with edit rights, than dump the database, upload it to a stage instance, perform all updates we need there and once satisfied with the results, we switch the stage instance to become the next live version. But even for small instances this is painful and far from a good solution.

In two bigger projects, we are in the same boat as Jeremy in that the whole setup is way to complex for deploying complete database dumps, especially since we can not afford to lock down the instances to read only mode just for some updates.

For those, we have used Migraine to some extend (see also this related discussion). It is not a Drupal module but a python script that we adapted a bit to our needs. It aims to create somewhat structured dumps, separating user supplied content from settings and other stuff, thus allowing for more selective update and staging strategies. But given the more or less chaotic Drupal database structure (especially the lack of referential integrity enforcement), using this approach needs constant tweaking when adding new modules and is pretty risky, as one needs to make extra sure to dump/update only coherent sets of tables.

We try to minimize the need for 'wholesale' dump/update operations by using the update functions of our custom modules and I like Jeremy Frenchs suggestion of adding a 'dummy' module just for the ability to add update functions for other settings!

All in all, updating/migrating Drupal instances is a big pain right now and I hope there will be a more coherent solution in future versions, although I can see that it is difficult to come up with a generalized approach given the current database schema and the amount of custom modules with individual additions out there :/


PS: Backup and Migrate is a Drupal module that seems to take an approach similar to that of the Migraine script, but I have not used it yet.

2
ответ дан 1 December 2019 в 13:33
поделиться

Хенрик и Джереми дали отличные ответы о состоянии развертывания. Я также слышал, что Capistrano (рубин) используется с хорошим эффектом. В DrupalCampLA Case Study описывается используемый ими механизм развертывания (включая Capistrano), а загружаемый пакет включает их сценарий (-ы) развертывания.

Если вы хотите минимизировать размер дампов вашей базы данных , обязательно настройте его так, чтобы исключить кеш-таблицы и сторожевые таблицы. Пользовательский интерфейс резервного копирования и миграции по умолчанию показывает, какие таблицы, по его мнению, стоит игнорировать.

2
ответ дан 1 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: