Рейтинг:3

Перенос контента из реальной среды в среду разработки с помощью Docker

флаг id

Я пытаюсь создать сервер разработки localhost с докеризованной средой drupal 8, и мне нужно перенести содержимое с живого сайта на localhost.

Я следовал инструкциям по докеризации здесь: https://www.drupal.org/docs/develop/local-server-setup/docker-with-solr-integration/docker-configuration

И теперь мне нужно перенести контент с живого сайта на сервер разработки, и я запутался в этом процессе.

Любая информация будет высоко оценена!

Редактировать:

Одним из способов импорта в мою локальную среду было создание дамп SQL из действующей базы данных, а затем загрузите ее в мой файл docker-compose.

версия: '3'
Сервисы:
  дБ:
    изображение: mariadb:10.3
    среда:
      MYSQL_DATABASE: друпал
      MYSQL_ROOT_PASSWORD: MyGreatPassword
    тома:
      - db_data:/var/lib/mysql
    перезапуск: всегда

  phpmyadmin:
    зависит от:
      - дб
    изображение: phpmyadmin/phpmyadmin
    перезапуск: всегда
    порты:
      - "8080:80"
    среда:
      PMA_HOST: дб
      MYSQL_ROOT_PASSWORD: MyGreatPassword
      UPLOAD_LIMIT: "500M"

  друпал:
    зависит от:
      - дб
    строить: .
    порты:
      - "2345:80"
      - "2443:443"
    тома:
      - ./:/var/www/html
    перезапуск: всегда

  решение:
    изображение: соль: 8
    порты:
      - "8983:8983"
    тома:
      - ./mycores/коллекция1:/mycores/коллекция1
    точка входа:
      - докер-entrypoint.sh
      - solr-предварительно создать
      - коллекция1
      - /mycores/коллекция1
тома:
  db_data:

Теперь у меня есть эта ошибка.

В Statement.php строка 59                                                                              
  SQLSTATE [42S22]: столбец не найден: 1054 неизвестные столбцы «теги» в «списке полей»

В строке Connection.php 701:
                                                                                                                                             
  SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестные «теги» столбца в «списке полей»: INSERT INTO {cache_bootstrap} (cid, expire, created, tags,  
   контрольная сумма, данные, сериализованные) ЗНАЧЕНИЯ (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder  
  _3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6) ПРИ ОБНОВЛЕНИИ ДУБЛИКАЦИИ КЛЮЧА cid = VALUES(cid), expire = VAL  
  UES (срок действия), создано = ЗНАЧЕНИЯ (создано), теги = ЗНАЧЕНИЯ (теги), контрольная сумма = ЗНАЧЕНИЯ (контрольная сумма), данные = ЗНАЧЕНИЯ (данные), сериализовано = ЗНАЧЕНИЯ (последовательные  
  измерено); Множество                                                                                                                               
  (                                                                                                                                          
      [:db_insert_placeholder_0] => крючок_информация                                                                                                
      [:db_insert_placeholder_1] => -1                                                                                                       
      [:db_insert_placeholder_2] => 1626559961.843                                                                                           
      [:db_insert_placeholder_3] =>                                                                                                          
      [:db_insert_placeholder_4] => 0                                                                                                        
      [:db_insert_placeholder_5] => a:39:{s:10:"token_info";a:1:{s:5:"group";s:6:"tokens";}s:16:"token_info_alter";a :1:{s:5:"группа";s:6:"в  
  kens";}s:6:"токены";a:1:{s:5:"группа";s:6:"токены";}s:12:"tokens_alter";a:1:{s:5 :"группа";s:6:"токены";}s:10:"views_data";a:1:{s:5:"группа";  
  s:5:"представления";}s:16:"views_data_alter";a:1:{s:5:"группа";s:5:"представления";}s:13:"views_analyze";a:1 :{s:5:"группа";s:5:"просмотры";}s:22:"views_invalid  
  ate_cache";a:1:{s:5:"группа";s:5:"представления";}s:26:"views_plugins_access_alter";a:1:{s:5:"группа";s:5: "просмотры";}s:24:"views_plugins_area_alter";  
  a:1:{s:5:"группа";s:5:"представления";}s:28:"views_plugins_argument_alter";a:1:{s:5:"группа";s:5:"представления" ;}s:36:"views_plugins_argument_default_alte  
  r";a:1:{s:5:"группа";s:5:"представления";}s:38:"views_plugins_argument_validator_alter";a:1:{s:5:"группа";s:5: "просмотры";}s:25:"views_plugins_cache_al  
  тер";a:1:{s:5:"группа";s:5:"представления";}s:36:"views_plugins_display_extender_alter";a:1:{s:5:"группа";s:5: "просмотры";}s:27:"views_plugins_display_  
  изменить";a:1:{s:5:"группа";s:5:"представления";}s:32:"views_plugins_exposed_form_alter";a:1:{s:5:"группа";s:5: "просмотры";}s:25:"views_plugins_field_alte  
  r";a:1:{s:5:"группа";s:5:"представления";}s:26:"views_plugins_filter_alter";a:1:{s:5:"группа";s:5: "просмотры";}s:24:"views_plugins_join_alter";a:1:{s:5  
  :"группа";s:5:"представления";}s:25:"views_plugins_pager_alter";a:1:{s:5:"группа";s:5:"представления";}s:25:"views_plugins_query_alter" ";a:1:{s:5:"группа";s:  
  5:"представления";}s:32:"views_plugins_relationship_alter";a:1:{s:5:"группа";s:5:"представления";}s:23:"views_plugins_row_alter";a:1:{ с:5:"группа";с:5:"ви  
  ws";}s:24:"views_plugins_sort_alter";a:1:{s:5:"группа";s:5:"views";}s:25:"views_plugins_style_alter";a:1:{s:5 :"группа";s:5:"просмотры";}s:26:"v  
  iews_plugins_wizard_alter";a:1:{s:5:"группа";s:5:"представления";}s:25:"views_query_substitutions";a:1:{s:5:"группа";s:15: "views_execution";}s:24:"  
  views_form_substitutions";a:1:{s:5:"группа";s:15:"views_execution";}s:14:"views_pre_view";a:1:{s:5:"группа";s:15: "views_execution";}s:15:"v  
  iews_pre_build";a:1:{s:5:"группа";s:15:"views_execution";}s:16:"views_post_build";a:1:{s:5:"group";s:15: "views_execution";}s:17:"views_pre  
  _execute";a:1:{s:5:"группа";s:15:"views_execution";}s:18:"views_post_execute";a:1:{s:5:"group";s:15: "views_execution";}s:16:"views_pre_ren  
  der";a:1:{s:5:"группа";s:15:"views_execution";}s:17:"views_post_render";a:1:{s:5:"group";s:15: "views_execution";}s:17:"views_query_alter";  
  a:1:{s:5:"группа";s:15:"views_execution";}s:16:"field_views_data";a:1:{s:5:"группа";s:5:"views" ;}s:22:"field_views_data_alter";a:1:{s:5:"gr  
  oup";s:5:"просмотры";}}                                                                                                                        
      [:db_insert_placeholder_6] => 1                                                                                                        
  ) 

Я читал некоторые решения для обновить сущности, но команда drush больше не поддерживается.

Запустить драш updb

Запустить драш энтуп
Рейтинг:3
флаг nr

Миграция состоит из двух частей: базы данных и статических файлов.

Самая важная часть — это база данных. Вам понадобится резервная копия базы данных (иначе sqldump) рабочей базы данных, и вам нужно будет импортировать его в локальную базу данных.Есть несколько способов сделать это, в зависимости от хостинга вашего сайта и от того, можете ли вы использовать толкотня.

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

Если вы установили Drush (через композитор требует драш/драш), то вы можете использовать драш sql: синхронизация для синхронизации баз данных.

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

Имейте в виду также, что бросовая миграция используется для другой цели — перенос содержимого сайта с другой платформы, отличной от Drupal, на ваш сайт Drupal.

В качестве мысленного эксперимента предположим, что у вас есть три копии вашего сайта Drupal — Dev, Stage и Prod — на одном сервере (с использованием трех разных Apache2). Виртуальные хосты с DocumentRoot установлен в /var/www/dev, /var/www/stg, и /var/www/prd).

В этом случае вы можете использовать локальная_синхронизация функция, определенная ниже, для синхронизации базы данных и файлов из среды более высокого уровня в среду более низкого уровня:

#!/бин/баш
★
функция local_drush () {
  если [[ $# -eq 0 ]]; тогда
    echo "local_drush (установить среду и выполнить локальный drush проекта)"
    echo "Использование: local_drush [dev stg prd] [drush-args]"
    echo "Задает для среды значение dev stg или prod, затем передает argv локальному drush."
  фи
  если [[ $1 == 'dev' ]] || [[ $1 == 'stg' ]] || [[ $1 == 'prd' ]]; тогда
    RETURN_DIR=${PWD}
    компакт-диск /var/www/$1
    ./vendor/bin/drush ${@:2}
    компакт-диск ${RETURN_DIR}
  еще
    echo "Неверное использование: первый аргумент должен быть dev, stg или prd."
  фи
}
★
функция local_sync () {
    если [[ $# -lt 1 ]] || [[ $# -gt 2 ]]; тогда
    echo "local_sync (перенести базу данных и файлы в более низкую среду)"
    echo "Использование: local_sync <ИСТОЧНИК> <ЦЕЛЬ>"
    echo "Установите исходную и целевую среды, затем синхронизируйте БД и файлы."
  фи
  если [[ $1 == 'prd' ]] || [[ $1 == 'stg' ]]; тогда
    ИСТОЧНИК=$1
    если [[ $2 == 'stg' ]] || [[ $2 == 'разработчик' ]]; тогда
      ЦЕЛЬ=$2
      если [[ ( $1 = 'prd' && $2 == 'stg' ) || ( $1 = 'prd' && $2 == 'dev' ) || ($1 = 'stg' && $2 == 'dev') ]]; тогда
        RETURN_DIR=${PWD}
        BACKUP_DIR=$HOME/sqldumps/${ИСТОЧНИК}
        BACKUP_FILE=${BACKUP_DIR}/${ИСТОЧНИК}_$(дата -I).sql
        mkdir -p ${BACKUP_DIR}
        SOURCE_FILES=/var/www/${SOURCE}/web/sites/default/files/
        TARGET_FILES=/var/www/${TARGET}/web/sites/default/files/
        EXCLUDE_CSS=${SOURCE_FILES}CSS/
        EXCLUDE_JS=${SOURCE_FILES}js/
        EXCLUDE_PHP=${SOURCE_FILES}php/
★
        echo "Создание временной резервной копии базы данных среды ${SOURCE}..."
        local_drush ${ИСТОЧНИК} sql:dump > ${BACKUP_FILE}
★
        если [[ -s "${BACKUP_FILE}" ]]; тогда
          echo "Импорт резервной копии базы данных в среду ${TARGET}..."
          local_drush ${TARGET} sqlc < ${BACKUP_FILE}
          echo "Развертывание поэтапной конфигурации для среды ${TARGET}..."
          local_drush ${TARGET} развернуть
          echo "Копирование общедоступных файлов из ${SOURCE} в ${TARGET}..."
          rsync --exclude ${EXCLUDE_CSS} \
          --exclude ${EXCLUDE_JS} \
          --exclude ${EXCLUDE_PHP} \
          --delete --progress -av ${SOURCE_FILES} ${TARGET_FILES}
          echo "Пересоздание кэшей Drupal для среды ${TARGET}..."
          local_drush Кэш ${TARGET}: перестроить
          echo "Импорт из ${SOURCE} в ${TARGET} успешно завершен."
          echo "Удаление резервной копии базы данных среды ${SOURCE}..."
          rm ${BACKUP_FILE}
          компакт-диск ${RETURN_DIR}
        еще
          echo "Ошибка: ${BACKUP_FILE} не найден, продолжить нельзя."
        фи
      еще
        echo "Недопустимое использование: невозможно скопировать из ${SOURCE} в ${TARGET}."
      фи
    еще
      echo "Неверное использование: второй аргумент должен быть stg или dev."
    фи
  еще
    если [[ $1 == 'dev' ]]; тогда
      echo "Недопустимое использование: невозможно перейти из среды разработки в среду более высокого уровня."
    еще
      echo "Неверное использование: первый аргумент должен быть prd или stg."
    фи
  фи
}

Обратите внимание, что локальная_синхронизация команда зависит от local_drush команда, которая, в свою очередь, зависит от локальных и удаленных проектов, содержащих локальный Drush в ./поставщик/бен/драш, который рекомендуемый метод установки Друша. Сценарий оболочки нестандартен, но его преимущество заключается в том, что он работает независимо от того, правильно ли вы настроили псевдонимы Drush.

Я оставлю это вам в качестве упражнения, чтобы выяснить, как получить файлы с вашего удаленного сервера в вашу локальную среду. Нет ничего плохого в том, чтобы выполнить все эти шаги вручную или использовать Filezilla для передачи файлов через SFTP через SSH, но учтите, что rsync команду (в строках 49-52) можно использовать с другим ${ИСТОЧНИК} который может быть на удаленном сервере. Единственное другое изменение, которое вам нужно будет сделать, это также rsync в ${BACKUP_FILE} до вашего местного (около линии 42).

Ха! Я вижу, что вы отредактировали свой вопрос, пока я писал свой ответ.

Ваш новый вопрос является дубликатом, ответил здесь к Клайв.

Из комментариев к этому ответу:

Официальный способ заключается в том, чтобы модули, полагающиеся на старый способ, явно писали код, чтобы обновления происходили в hook_update_N. Все мельчайшие детали здесь: https://drupal.org/node/3034742

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

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

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

Удачи!

Renato Francia avatar
флаг id
Спасибо! Цените этот отзыв
hotwebmatter avatar
флаг nr
Рад помочь! Если мой ответ решит вашу проблему, обязательно примите его, нажав зеленую галочку.
Рейтинг:2
флаг id

в его файле composer.json

требуется psr/log ^ 1.0.

Вероятно, эта библиотека добавлена ​​в этот файл composer.json, потому что она требуется от
Резервное копирование и миграция для Drupal 8

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

крючок_установить ()

внедрение и, в конечном итоге, отменить изменения, сделанные из старого профиля

крючок_установить ()
выполнение.

Конфигурация по-прежнему добавляется с файлами конфигурации в каталогах config/install и config/Optional для профилей установки. (См., например,

конфигурация/установка
и

конфигурация/необязательно

для

Стандарт

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.