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!