Điểm:3

Di chuyển nội dung từ môi trường trực tiếp sang môi trường phát triển với Docker

lá cờ id

Tôi đang cố gắng tạo một máy chủ phát triển máy chủ cục bộ với môi trường drupal 8 dockerized và cần chuyển nội dung từ trang web trực tiếp sang máy chủ cục bộ.

Tôi đã làm theo các hướng dẫn cho dockerization ở đây: https://www.drupal.org/docs/develop/local-server-setup/docker-with-solr-integration/docker-configuration

Và bây giờ tôi phải di chuyển nội dung từ trang web trực tiếp sang máy chủ của nhà phát triển và tôi bối rối về quy trình này.

Bất kỳ thông tin sẽ được đánh giá cao!

Chỉnh sửa:

Một cách để nhập vào môi trường cục bộ của tôi là tạo một kết xuất SQL từ cơ sở dữ liệu trực tiếp và sau đó tải nó lên tệp docker-compose của tôi.

phiên bản: '3'
dịch vụ:
  đb:
    hình ảnh: mariadb:10.3
    môi trường:
      MYSQL_DATABASE: drupal
      MYSQL_ROOT_PASSWORD: MyGreatPassword
    khối lượng:
      - db_data:/var/lib/mysql
    khởi động lại: luôn luôn

  phpmyadmin:
    phụ thuộc:
      - db
    hình ảnh: phpmyadmin/phpmyadmin
    khởi động lại: luôn luôn
    cổng:
      - "8080:80"
    môi trường:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: MyGreatPassword
      UPLOAD_LIMIT: '500M'

  drupal:
    phụ thuộc:
      - db
    xây dựng: .
    cổng:
      - "2345:80"
      - "2443:443"
    khối lượng:
      - ./:/var/www/html
    khởi động lại: luôn luôn

  solr:
    hình ảnh: solr:8
    cổng:
      - "8983:8983"
    khối lượng:
      - ./mycores/collection1:/mycores/collection1
    điểm vào:
      - docker-entrypoint.sh
      - solr-tiền tạo
      - bộ sưu tập1
      - /mycores/bộ sưu tập1
khối lượng:
  db_data:

Bây giờ, tôi đang gặp lỗi này.

Trong Statement.php dòng 59                                                                              
  SQLSTATE [42S22]: Không tìm thấy cột: 1054 'thẻ' cột không xác định trong 'danh sách trường'

Trong Connection.php dòng 701:
                                                                                                                                             
  SQLSTATE [42S22]: Không tìm thấy cột: 1054 Cột 'thẻ' không xác định trong 'danh sách trường': CHÈN VÀO {cache_bootstrap} (cid, hết hạn, đã tạo, thẻ,  
   tổng kiểm tra, dữ liệu, được tuần tự hóa) GIÁ TRỊ (: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) BẬT CẬP NHẬT KHÓA DUPLICATE cid = VALUES(cid), hết hạn = VAL  
  UES(hết hạn), đã tạo = VALUES(đã tạo), thẻ = VALUES(thẻ), tổng kiểm tra = VALUES(tổng kiểm tra), dữ liệu = VALUES(dữ liệu), tuần tự hóa = VALUES(số sê-ri  
  hóa); Mảng                                                                                                                               
  (                                                                                                                                          
      [:db_insert_placeholder_0] => hook_info                                                                                                
      [: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:"group";s:6:"to  
  kens";}s:6:"tokens";a:1:{s:5:"group";s:6:"tokens";}s:12:"tokens_alter";a:1:{s:5 :"group";s:6:"tokens";}s:10:"views_data";a:1:{s:5:"group";  
  s:5:"views";}s:16:"views_data_alter";a:1:{s:5:"group";s:5:"views";}s:13:"views_analyze";a:1 :{s:5:"group";s:5:"views";}s:22:"views_invalid  
  ate_cache";a:1:{s:5:"group";s:5:"views";}s:26:"views_plugins_access_alter";a:1:{s:5:"group";s:5: "view";}s:24:"views_plugins_area_alter";  
  a:1:{s:5:"group";s:5:"views";}s:28:"views_plugins_argument_alter";a:1:{s:5:"group";s:5:"views" ;}s:36:"views_plugins_argument_default_alte  
  r";a:1:{s:5:"group";s:5:"views";}s:38:"views_plugins_argument_validator_alter";a:1:{s:5:"group";s:5: "view";}s:25:"views_plugins_cache_al  
  ter";a:1:{s:5:"group";s:5:"views";}s:36:"views_plugins_display_extender_alter";a:1:{s:5:"group";s:5: "lượt xem";}s:27:"lượt xem_plugins_display_  
  alter";a:1:{s:5:"group";s:5:"views";}s:32:"views_plugins_exposed_form_alter";a:1:{s:5:"group";s:5: "view";}s:25:"views_plugins_field_alte  
  r";a:1:{s:5:"group";s:5:"views";}s:26:"views_plugins_filter_alter";a:1:{s:5:"group";s:5: "view";}s:24:"views_plugins_join_alter";a:1:{s:5  
  :"group";s:5:"views";}s:25:"views_plugins_pager_alter";a:1:{s:5:"group";s:5:"views";}s:25:"views_plugins_query_alter ";a:1:{s:5:"nhóm";s:  
  5:"views";}s:32:"views_plugins_relationship_alter";a:1:{s:5:"group";s:5:"views";}s:23:"views_plugins_row_alter";a:1:{ s:5:"nhóm";s:5:"vie  
  ws";}s:24:"views_plugins_sort_alter";a:1:{s:5:"group";s:5:"views";}s:25:"views_plugins_style_alter";a:1:{s:5 :"group";s:5:"views";}s:26:"v  
  iews_plugins_wizard_alter";a:1:{s:5:"group";s:5:"views";}s:25:"views_query_substitutions";a:1:{s:5:"group";s:15: "views_execution";}s:24:"  
  views_form_substitutions";a:1:{s:5:"group";s:15:"views_execution";}s:14:"views_pre_view";a:1:{s:5:"group";s:15: "views_execution";}s:15:"v  
  iews_pre_build";a:1:{s:5:"group";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:"group";s:15:"views_execute";}s:18:"views_post_execute";a:1:{s:5:"group";s:15: "views_execution";}s:16:"views_pre_ren  
  der";a:1:{s:5:"group";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:"group";s:15:"views_execution";}s:16:"field_views_data";a:1:{s:5:"group";s:5:"views" ;}s:22:"field_views_data_alter";a:1:{s:5:"gr  
  oup";s:5:"views";}}                                                                                                                        
      [:db_insert_placeholder_6] => 1                                                                                                        
  ) 

Tôi đã đọc một số giải pháp để cập nhật các thực thể, nhưng lệnh drush không còn được duy trì.

Chạy drush updb

Chạy drush enup
Điểm:3
lá cờ nr

Có hai phần trong quá trình di chuyển: cơ sở dữ liệu và các tệp tĩnh.

Phần quan trọng nhất là cơ sở dữ liệu. Bạn sẽ cần sao lưu cơ sở dữ liệu (còn gọi là sqldump) của cơ sở dữ liệu sản xuất và bạn sẽ cần nhập cơ sở dữ liệu đó vào cơ sở dữ liệu cục bộ của mình.Có một số cách để thực hiện điều này, tùy thuộc vào lưu trữ trang web của bạn và liệu bạn có thể sử dụng hay không thuốc ngủ.

Trang web cục bộ sẽ hoạt động được phần nào sau khi nhập cơ sở dữ liệu, nhưng nó có thể trông kỳ cục nếu thiếu nội dung tĩnh chẳng hạn như tệp hình ảnh. Tùy thuộc vào cách cấu hình trang web sản xuất, bạn có thể tìm thấy hầu hết những thứ này trong thư mục tệp công khai. Vị trí phổ biến nhất cho các tệp này là ./web/sites/default/files nhưng đường dẫn có thể khác nhau. Bạn sẽ cần sao chép các tệp này từ máy chủ lưu trữ web sản xuất sang môi trường cục bộ của mình bằng công cụ như rsync, scp, hoặc sftp.

Nếu bạn đã cài đặt Drush (thông qua nhà soạn nhạc yêu cầu drush/drush) thì bạn có thể sử dụng drush sql: đồng bộ hóa để đồng bộ hóa cơ sở dữ liệu.

Trước khi bạn làm điều đó, bạn có thể muốn thiết lập Bí danh Drush cho các môi trường cục bộ và từ xa.

Hãy ghi nhớ, đồng thời, rằng drush di cư được sử dụng cho một mục đích khác -- di chuyển nội dung trang web từ một nền tảng không phải Drupal khác vào trang web Drupal của bạn.

Như một thử nghiệm suy nghĩ, giả sử bạn có ba bản sao của trang web Drupal -- Dev, Stage và Prod -- trên một máy chủ (sử dụng ba Apache2 khác nhau Máy chủ ảo với Tài liệuRoot đặt thành /var/www/dev, /var/www/stg, và /var/www/prd).

Trong trường hợp đó, bạn có thể sử dụng local_sync chức năng được xác định bên dưới để đồng bộ hóa cơ sở dữ liệu và tệp từ môi trường cao hơn sang môi trường thấp hơn:

#!/bin/bash
â
hàm local_drush () {
  nếu [[ $# -eq 0 ]]; sau đó
    echo "local_drush (thiết lập môi trường và thực thi project-local drush)"
    echo "Cách sử dụng: local_drush [dev stg prd] [drush-args]"
    echo "Đặt môi trường thành dev stg hoặc prod, sau đó chuyển argv sang drush cục bộ."
  fi
  nếu [[ $1 == 'dev' ]] || [[ $1 == 'stg' ]] || [[ $1 == 'prd' ]]; sau đó
    RETURN_DIR=${PWD}
    cd /var/www/$1
    ./vendor/bin/drush ${@:2}
    cd ${RETURN_DIR}
  khác
    echo "Cách sử dụng không hợp lệ: đối số đầu tiên phải là dev, stg hoặc prd."
  fi
}
â
hàm local_sync () {
    nếu [[ $# -lt 1 ]] || [[ $# -gt 2 ]]; sau đó
    echo "local_sync (di chuyển db và tệp sang môi trường thấp hơn)"
    echo "Cách sử dụng: local_sync <NGUỒN> <MỤC TIÊU>"
    echo "Đặt môi trường nguồn và đích, sau đó đồng bộ hóa db và tệp."
  fi
  nếu [[ $1 == 'prd' ]] || [[ $1 == 'stg' ]]; sau đó
    NGUỒN=$1
    nếu [[ $2 == 'stg' ]] || [[ $2 == 'dev' ]]; sau đó
      MỤC TIÊU=$2
      nếu [[ ( $1 = 'prd' && $2 == 'stg' ) || ( $1 = 'prd' && $2 == 'dev' ) || ( $1 = 'stg' && $2 == 'dev' ) ]]; sau đó
        RETURN_DIR=${PWD}
        BACKUP_DIR=$HOME/sqldumps/${SOURCE}
        BACKUP_FILE=${BACKUP_DIR}/${SOURCE}_$(date -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 "Tạo bản sao lưu cơ sở dữ liệu tạm thời của môi trường ${SOURCE}..."
        local_drush ${SOURCE} sql:dump > ${BACKUP_FILE}
â
        nếu [[ -s "${BACKUP_FILE}" ]]; sau đó
          echo "Nhập sao lưu cơ sở dữ liệu vào môi trường ${TARGET}..."
          local_drush ${TARGET} sqlc < ${BACKUP_FILE}
          echo "Triển khai cấu hình theo giai đoạn cho môi trường ${TARGET}..."
          triển khai local_drush ${TARGET}
          echo "Đang sao chép các tệp công khai từ ${SOURCE} sang ${TARGET}..."
          rsync --exclude ${EXCLUDE_CSS} \
          --loại trừ ${EXCLUDE_JS} \
          --loại trừ ${EXCLUDE_PHP} \
          --delete --progress -av ${SOURCE_FILES} ${TARGET_FILES}
          echo "Xây dựng lại Drupal cache cho môi trường ${TARGET}..."
          local_drush ${TARGET} bộ đệm: xây dựng lại
          echo "Nhập từ ${SOURCE} vào ${TARGET} đã hoàn tất thành công."
          echo "Đang xóa sao lưu cơ sở dữ liệu của môi trường ${SOURCE}..."
          rm ${BACKUP_FILE}
          cd ${RETURN_DIR}
        khác
          echo "Lỗi: không tìm thấy ${BACKUP_FILE}, không thể tiếp tục."
        fi
      khác
        echo "Cách sử dụng không hợp lệ: không thể sao chép từ ${SOURCE} sang ${TARGET}."
      fi
    khác
      echo "Cách sử dụng không hợp lệ: đối số thứ hai phải là stg hoặc dev."
    fi
  khác
    nếu [[ $1 == 'dev' ]]; sau đó
      echo "Cách sử dụng không hợp lệ: không thể di chuyển từ nhà phát triển sang môi trường cao hơn."
    khác
      echo "Cách sử dụng không hợp lệ: đối số đầu tiên phải là prd hoặc stg."
    fi
  fi
}

Lưu ý rằng local_sync lệnh phụ thuộc vào local_drush lệnh, do đó phụ thuộc vào các dự án cục bộ và từ xa có chứa Drush cục bộ trong ./vendor/bin/drush, đó là phương pháp được đề xuất cài đặt Drush. Tập lệnh shell không chuẩn, nhưng nó có ưu điểm là vẫn hoạt động cho dù bạn đã định cấu hình bí danh Drush đúng cách hay chưa.

Tôi sẽ dành nó cho bạn như một bài tập để tìm ra cách đưa các tệp từ máy chủ từ xa vào môi trường cục bộ của bạn. Không có gì sai khi thực hiện tất cả các bước này theo cách thủ công hoặc sử dụng Filezilla để truyền tệp qua SFTP qua SSH, nhưng hãy cân nhắc rằng rsync lệnh (trên các dòng 49-52) có thể được sử dụng với một ${SOURCE} mà có thể trên một máy chủ từ xa. Thay đổi duy nhất khác mà bạn cần thực hiện cũng là rsync các ${BACKUP_FILE} đến địa phương của bạn (khoảng dòng 42).

Hà! Tôi thấy rằng bạn đã chỉnh sửa câu hỏi của mình trong khi tôi đang viết câu trả lời của mình.

Câu hỏi mới của bạn trùng lặp, đã được trả lời đây qua Clive.

Từ các ý kiến ​​​​về câu trả lời đó:

Cách chính thức dành cho các mô-đun dựa vào cách cũ để viết mã một cách rõ ràng để thực hiện cập nhật trong hook_update_N. Tất cả các chi tiết gritty là ở đây: https://drupal.org/node/3034742

Cách giải quyết là cài đặt Cập nhật thực thể phát triển mô-đun, làm cho cái cũ khởi động drush lệnh có sẵn.

Bạn không được phép sử dụng điều này trong sản xuất, nhưng bạn có thể sử dụng trong môi trường phát triển cục bộ của mình miễn là bạn không quảng cáo DB cục bộ của mình cho môi trường sản xuất.

Có vẻ như bạn chỉ gặp sự cố này ở địa phương chứ không phải trong sản xuất, vì vậy tùy chọn này có thể phù hợp với bạn.

Chúc may mắn!

Renato Francia avatar
lá cờ id
Cảm ơn bạn! Đánh giá cao phản hồi này
hotwebmatter avatar
lá cờ nr
Vui mừng được giúp đỡ! Nếu câu trả lời của tôi giải quyết được vấn đề của bạn, hãy chắc chắn chấp nhận nó bằng cách nhấp vào dấu kiểm màu xanh lá cây.
Điểm:2
lá cờ id

Ok, tôi đã có thể làm điều đó khá dễ dàng với drush dumps.

Đầu tiên, tôi đã kết xuất trên máy chủ trực tiếp với:

drush sql: kết xuất > db.sql

Và sau đó trong môi trường docker của tôi.

Trước tiên, tôi đảm bảo rằng tôi đã xóa các bảng khỏi cơ sở dữ liệu từ Phpmyadmin.

Sau đó, tôi đã nhập hình ảnh docker.

docker container exec -it <docker-container-id> bash

Và sau đó chạy drush với tên của cơ sở dữ liệu mà tôi đã kết xuất trực tiếp (tôi sử dụng filezilla để chuyển nó sang nhà phát triển cục bộ của mình).

drush sql: cli < db.sql

Đảm bảo rằng bạn tải xuống các tệp công khai có hình ảnh và thêm chúng vào thư mục tệp cục bộ.

Lần đầu tiên tôi tạo trang web và cài đặt với một trang web trống. Sau đó, chỉ thêm các hình ảnh kể từ khi thay thế css, js và php được tạo trong các tệp đã tạo ra sự cố.

Hi vọng điêu nay co ich.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.