Quy trình cập nhật cốt lõi dựa trên nhà soạn nhạc chính xác là gì?


14

Tôi muốn sử dụng trình soạn thảo để quản lý các phụ thuộc Drupal 8, nhưng tôi không chắc quy trình cập nhật cốt lõi phù hợp là gì. Hiện tại tôi đang sử dụng drush để cập nhật lõi lên bản beta mới nhất, nhưng tôi cũng có một số phụ thuộc trong tệp composer.json của mình, vì vậy sau bản cập nhật tôi đang sử dụng cài đặt trình soạn thảo để cài đặt tất cả các phụ thuộc của nhà cung cấp đóng góp. Có vẻ như việc composer installghi đè một số tệp trong thư mục lõi, mặc dù tôi vừa cập nhật lõi lên phiên bản mới nhất.

Tôi cũng đã cố gắng chỉnh sửa thủ công tệp composer.json và thay thế dòng "drupal / core" bằng bản phát hành beta cụ thể, ví dụ: "drupal/core": "~8.0-beta14",nhưng nó vẫn ghi đè các tệp trong thư mục lõi.

Quy trình làm việc đúng là gì?

Câu trả lời:


11

Tôi đoán rằng bạn đang sử dụng drupal-composer / drupal-project làm cơ sở cho dự án của bạn. Nếu không, hãy xem dự án đó và so sánh nó với dự án của bạn.

Ngoài ra, bạn nói rằng bạn muốn sử dụng trình soạn thảo để quản lý các phụ thuộc Drupal 8, vì vậy tôi cho rằng bạn đã chọn các mô-đun đóng góp của mình thông qua composer require drupal/develchứ không phải drush dl devel.

Nếu bạn đang làm tất cả những điều này, thì bạn nên sử dụng composer updateđể cập nhật lõi Drupal và tất cả các mô-đun đóng góp của bạn. Miễn là bạn giữ lại composer.locktệp của mình , composer installkhông nên thay đổi phiên bản của bất kỳ phụ thuộc nào của bạn. Bạn không nên sử dụng drush pm-updatetất cả. Nó không quan trọng với bạn cho dù các tập tin trong corethư mục có được cập nhật hay không, vì thư mục này được Composer quản lý. Bạn tốt hơn hết là không cam kết các thư mục do nhà soạn nhạc quản lý vào kho lưu trữ của bạn, mặc dù bạn có thể nếu bạn muốn.

Tất nhiên, bạn nên chạy drush updatedbbất cứ khi nào composer updatethay thế lõi Drupal hoặc bất kỳ mô-đun nào.

Để tránh nhận phiên bản phát triển, hãy đặt độ ổn định tối thiểu của bạn thành 'beta' trong tệp composer.json bằng cờ ổn định của Trình soạn thảo .

Nếu bạn đang sử dụng drupal-composer / drupal-project để quản lý trang web của mình, thì tất cả các tệp cấp gốc như README.txt, .htaccess và index.html đều thuộc sở hữu của dự án của bạn. Điều đó có nghĩa là bạn nên kiểm tra chúng vào kho git của bạn; Nhà soạn nhạc sẽ không cập nhật chúng, bạn phải tự cập nhật chúng khi chúng thay đổi. Các tệp này chỉ nên thay đổi hiếm khi, nhưng drupal-composer / drupal-project có một kịch bản để cập nhật các tệp này .


Giả sử rằng tôi đang sử dụng cập nhật trình soạn thảo thay vì cập nhật pmush, làm cách nào để cập nhật các tệp như README.txt, .htaccess, v.v.? Và làm thế nào đến bản cập nhật drush cung cấp cốt lõi khác với bản cập nhật nhà soạn nhạc? Và tôi có nên thay thế phiên bản của drupal trong composer.json của mình thành 8.0-betaX trước mỗi bản cập nhật không? Tôi không muốn sử dụng dev. phiên bản ..
rreiss

Cập nhật câu trả lời.
greg_1_anderson

+1 greg_1_anderson - điều này có vẻ tuyệt vời, đây có phải là cách dứt khoát để thực hiện cập nhật bảo mật cho Drupal 8 không? với D7, đó là: drupal.stackexchange.com/a/71578
trị liệu

Đây trông giống như nó hoạt động nếu ai bước đầu cài đặt Drupal 8.1 với các bước sau: drupal.org/node/2471553 (Tôi thấy điều này để làm việc mà không có lỗi)
therobyouknow

"Tất nhiên, bạn nên chạy drush updatedbbất cứ khi nào bản cập nhật của nhà soạn nhạc thay thế lõi Drupal hoặc bất kỳ mô-đun nào." - cảm ơn bạn và nếu ban đầu bạn đã cài đặt drupal với các bước này, drupal.org/node/2471553 thì bạn cần đường dẫn đầy đủ đến drush cụ thể với cài đặt Drupal 8 của bạn (vì chúng được sử dụng để chạy cài đặt như bước cuối cùng). Trước tiên, bạn cần phải cd vào web và một khi vào / web lệnh cập nhật db với đường dẫn đầy đủ sẽ là: ../vendor/drush/drush/drush updatedb(Tôi thấy điều này hoạt động).
trị liệu

2

Sau đây là OK cho phát hành bản vá 8.4.x> 8.4.y , nhưng không bật đèn xanh cho các phiên bản nhỏ 8.4.x> 8.5.x . Chuyển đến CẬP NHẬT 3 dưới đây cho những gì tôi tin là "câu trả lời" cho các bản cập nhật phát hành nhỏ.

1- Sao lưu mọi tệp đi kèm với Drupal mà bạn đã sửa đổi, chẳng hạn như .htaccess, robot.txt, v.v. (2 tệp này được thay đổi phổ biến nhất).

2- [Tôi nói xóa tập tin khóa là sai, xem CẬP NHẬT bên dưới] Xóa trình soạn thảo.lock tệp (trong thư mục cấp cao nhất của trang web của bạn). Điều này được tạo lại trong bước 5.

3- Kiểm tra composer.json của bạn (trong thư mục cấp cao nhất của trang web của bạn) và đảm bảo rằng "drupal: core" nằm trong phần yêu cầu chứ không phải trong phần thay thế, ví dụ

"require": {
"drupal/core": "^8.4"
},

không phải

"replace": {
"drupal/core": "^8.4"
},

Nếu "drupal / core" nằm trong phần thay thế, hãy di chuyển nó đến phần yêu cầu và xóa phần thay thế. Nếu có các mục khác trong phần thay thế, chỉ cần loại bỏ "drupal / core" không phải toàn bộ phần thay thế - nhưng tôi nghĩ "drupal / core" thường là thứ duy nhất ở đó.

Đặt phiên bản bạn muốn cập nhật vào "drupal / core", ví dụ:

"drupal / core": "^ 8,5" - sẽ cập nhật lên phiên bản mới nhất của 8.5. "Drupal / core": "8.4.6" - sẽ cập nhật lên phiên bản 8.4.6.

5- Chạy cái này (trong thư mục cấp cao nhất của trang web của bạn):

composer update drupal/core --with-dependencies

6- Nếu không có lỗi, thì hãy làm như bình thường, chạy các bản cập nhật và xóa bộ đệm:

drush updatedb
drush cr

Hoặc nếu không sử dụng drush, hãy truy cập /update.php để chạy các bản cập nhật, sau đó đến admin / config / Development / Performance và nhấn nút "Xóa tất cả bộ nhớ cache".

7- Nếu bạn đã sao lưu các tệp trong bước đầu tiên (.htaccess, robot.txt), hãy đặt chúng trở lại. Nhưng hãy kiểm tra xem liệu Drupal có thực hiện cập nhật cho các tệp đó không và thêm những thay đổi đó vào của bạn.

LÀM XONG

Nếu có lỗi với bản cập nhật của nhà soạn nhạc ở bước 5, thì thường là do sự cố với các phiên bản của nội dung trong thư mục nhà cung cấp.

Đây là một bài viết tuyệt vời để xử lý các vấn đề như vậy: https : //www.jeffge Muff.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update và đọc 2 bài đăng khác của Jeff trên Drupal và Composer để có được thêm kiến ​​thức về điều đó.

Tôi đã được 2 người trên Twitter nói rằng composer.lock không nên bị xóa (Bước 2 ở trên). Các composer update drupal/core --with-dependencieslệnh tái tạo các tập tin khóa anyways.

Khi thử nghiệm phương pháp này, tôi thấy nó hoạt động tốt trong 8.4.3> 8.4.6 (ví dụ) nhưng tôi gặp lỗi với 8.4.6> 8.5.x. Sẽ báo cáo lại khi tôi tìm ra nó.

Ví dụ về lỗi:

Your requirements could not be resolved to an installable set of packages.
  Problem 1
    - symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
    - symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
    - symfony/yaml 3.4.x-dev conflicts with symfony/console[v3.2.8].
    - drupal/core 8.5.0 requires symfony/yaml ~3.4.5 -> satisfiable by symfony/yaml[3.4.x-dev].
    - Installation request for drupal/core 8.5.0 -> satisfiable by drupal/core[8.5.0].
    - Installation request for symfony/console (locked at v3.2.8, required as ~3.2.8) -> satisfiable by symfony/console[v3.2.8].

Bài đăng này của Jeff Geantic giải quyết các vấn đề tương tự, nhưng cho đến nay không có may mắn cho tôi: https : //www.jeffge Muff.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update

Vì vậy, ... điều duy nhất có vẻ hiệu quả với tôi trong 8.4.x> 8.5.x là "tùy chọn hạt nhân" mà rất nhiều người khác dường như sử dụng, đó là chạy composer update.

Tôi đoán điều đó là ổn miễn là bạn chắc chắn về các phiên bản mô-đun trong composer.json. Có lẽ người ta nên khóa chúng xuống phiên bản hiện tại. Ví dụ:

"drupal/address": "1.3"

thay vì:

"drupal/address": "^1.3"

Nhưng câu trả lời có đúng không?

OK câu trả lời dường như ở khắp mọi nơi là thực hiện "tùy chọn hạt nhân":

A. Xóa /vendorthư mục.

B. Chạy composer updatevà chỉ cần cập nhật các mô-đun của bạn cùng với lõi. Hoặc, khóa các phiên bản mô-đun composer.jsonnếu bạn không muốn cập nhật chúng.

Một người trên Drupal Slack nói rằng "toàn bộ triết lý của Nhà soạn nhạc là bạn phải luôn cập nhật các gói, càng thường xuyên càng tốt" . Đóng gói bao gồm các mô-đun tôi nghĩ. Vì vậy, nó làm cho một số ý nghĩa tôi đoán.

Khi tôi nhận được từ 8.4.6 đến 8.5.0, điều này hoạt động tốt để có được từ 8.5.0 đến 8.5.1 composer update drupal/core --with-dependenciesgiống như đã làm cho 8.4.3 đến 8.4.6.

Tôi bắt đầu kết luận rằng "câu trả lời" là việc xóa thư mục nhà cung cấp và tệp composer.lock, sau đó sử dụng composer updatelà ổn và người ta chỉ cần đảm bảo số phiên bản cho các phụ thuộc trong tệp composer.json là những gì bạn muốn . Nó không phải là một thỏa thuận lớn để quản lý các phiên bản mô-đun bạn muốn giữ hoặc cho phép cập nhật composer.json.

Ví dụ:

"drupal/admin_toolbar": "1.18", có nghĩa là gắn bó với 1,18

"drupal/admin_toolbar": "^1.18", có nghĩa là tiếp tục và cập nhật nhưng trong vòng 1.x (không phải 2.x)

Điều này được hỗ trợ bởi một bình luận (General Redneck) trên bài đăng này: https : //www.jeffge Muff.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update "Một trong những điều tôi đã tìm thấy khi tôi hỗ trợ là việc khóa các phiên bản mô-đun và lõi là một ý tưởng hay để bạn CÓ THỂ điều chỉnh nhiệt khi bạn muốn bởi vì có những lúc một số plugin khác nhau thậm chí không muốn hành xử chính xác. "

Nhân tiện, tệp composer.lock không giúp được gì composer updatevì nó bị thổi bay (trái ngược với composer installnơi anh ta khóa tệp được đọc):

Chạy composer installsẽ:

  • Kiểm tra nếu composer.locktồn tại
  • Nếu không, thực hiện một composer updateđể tạo một
  • Nếu composer.locktồn tại, cài đặt các phiên bản đã chỉ định từ tệp khóa

Chạy composer updatesẽ:

  • Kiểm tra composer.json
  • Xác định các phiên bản mới nhất để cài đặt dựa trên thông số kỹ thuật phiên bản của bạn
  • Cài đặt các phiên bản mới nhất
  • Cập nhật composer.lockđể phản ánh các phiên bản mới nhất được cài đặt

Tham chiếu: https://www.engineyard.com/blog/composer-its-all-about-the-lock-file

Tôi thấy điều này được đề cập ở trên: https://github.com/drupal-composer/drupal-project . Tôi đã sử dụng nó và nó vẫn ổn nhưng nó không phải là một yêu cầu để sử dụng Trình soạn thảo với Drupal. Thật khó hiểu vì nó giống như "âm thanh" giống như tên của nó. Khi tôi mới bắt đầu với Drupal 8, tôi nghĩ rằng nó là bắt buộc, vì vậy đã xây dựng trang web D8 đầu tiên của tôi với điều đó, nghĩ rằng đó là cách thực hành tốt nhất.

"Phiên bản" đó của Drupal có tài liệu trong thư mục / web chứ không phải trong thư mục trên cùng của dự án. Ngoài ra, có một loạt các công cụ được thêm vào .gitignore so với Drupal bình thường:

/drush/contrib/
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/

Vì vậy, phiên bản Drupal này thực sự có ý nghĩa hơn đối với các trang web đang sử dụng tích hợp liên tục để thực hiện bản dựng mới của Drupal trên mỗi triển khai, sử dụng cài đặt của nhà soạn nhạc. Nếu bạn triển khai với một phương thức bình thường hơn, rõ ràng bạn phải cam kết tất cả những thứ trên với git repo của mình hoặc nó sẽ không được triển khai đến máy chủ của bạn [1] và những thứ đó là tất cả cần thiết để Drupal chạy.

[1] nếu git có liên quan đến việc triển khai của bạn - nếu bạn triển khai với SFTP, hãy bỏ qua điều này.


composer update drupal/core symfony/config webflo/drupal-core-strict --with-dependencieschưa bao giờ thất bại với tôi Hoạt động trên một số phiên bản nhỏ, ví dụ 8.3 -> 8.6
Clive

1

Sử dụng gói drupal / core trên packagist.org, chúng tôi thực sự có thể quản lý lõi, các mô-đun đóng góp (, chủ đề và hồ sơ) và các nhà cung cấp khác thông qua nhà soạn nhạc.

Tôi đã thiết lập các tệp sau trong thư mục gốc của mình và thực thi composer install

composer.json

{
  "require": {
    "composer/installers": "^1.0.20",
    "drupal/core": "8.0.*"
  },
  "extra": {
    "installer-paths": {
      "core": ["type:drupal-core"],
      "modules/contrib": ["type:drupal-module"],
      "profiles/contrib": ["type:drupal-profile"],
      "themes/contrib": ["type:drupal-theme"]
    }
  },
  "scripts": {
    "post-install-cmd": [
      "./post_install.sh"
    ]
  }
}

post_install.sh

#!/usr/bin/env bash
export RAW_DRUPAL="https://raw.githubusercontent.com/drupal/drupal/8.0.x"
curl $RAW_DRUPAL/example.gitignore > example.gitignore
curl $RAW_DRUPAL/.gitattributes > .gitattributes
curl $RAW_DRUPAL/.htaccess > .htaccess
curl $RAW_DRUPAL/.csslintrc > .csslintrc
curl $RAW_DRUPAL/.editorconfig > .editorconfig
curl $RAW_DRUPAL/.eslintrc > .eslintrc
curl $RAW_DRUPAL/.eslintignore > .eslintignore
curl $RAW_DRUPAL/index.php > index.php
curl $RAW_DRUPAL/update.php > update.php
curl $RAW_DRUPAL/web.config > web.config
curl $RAW_DRUPAL/autoload.php > autoload.php
curl $RAW_DRUPAL/robots.txt > robots.txt
mkdir -p sites/default
curl $RAW_DRUPAL/sites/example.sites.php > sites/example.sites.php
curl $RAW_DRUPAL/sites/development.services.yml > sites/development.services.yml
curl $RAW_DRUPAL/sites/example.settings.local.php > sites/example.settings.local.php
curl $RAW_DRUPAL/sites/default/default.services.yml > sites/default/default.services.yml
curl $RAW_DRUPAL/sites/default/default.settings.php > sites/default/default.settings.php

Thưởng thức :)


Tôi đoán tôi sẽ cần tất cả những phép thuật uốn lượn mà bạn đã làm. Tôi đã mong đợi tất cả những tập tin cần thiết này sẽ được nhà soạn nhạc đưa vào vị trí.
dxvargas

@hiphip Các tệp bên ngoài thư mục lõi không thay đổi thường xuyên, do đó, ở trên có thể là một tập lệnh mà bạn thực hiện thủ công khi cập nhật drupal từ một phiên bản nhỏ sang phiên bản tiếp theo (ví dụ 8.1 đến 8.2)
Eyal

1

Có, bạn có thể quản lý lõi Drupal với nhà soạn nhạc. Có một vài điều cần chú ý mặc dù.

Bạn có thể sẽ bị hết thời gian do một số mục mà nhà soạn nhạc phải chạy qua, đặc biệt nếu bạn chạy trong máy ảo cục bộ. Nếu bạn chạy, composer installbạn có thể sẽ gặp lỗi trình soạn thảo:

 [RuntimeException]                                    
  Could not delete core/.nfs0000000000000000000001:

Hãy chắc chắn rằng bạn sử dụng yêu cầu

{
  "require": {
   "drupal/core": "8.3.*"

Đồng thời thêm phần mở rộng vào thời gian chờ trong cấu hình

    "installer-paths": {
        "core": ["type:drupal-core"],
        "modules/contrib/{$name}": ["type:drupal-module"],
        "profiles/contrib/{$name}": ["type:drupal-profile"],
        "themes/contrib/{$name}": ["type:drupal-theme"],
        "drush/contrib/{$name}": ["type:drupal-drush"],
        "modules/custom/{$name}": ["type:drupal-custom-module"],
        "themes/custom/{$name}": ["type:drupal-custom-theme"]
    }
},

"config":{
            "process-timeout": 1600
       },

Ngoài ra, nếu điều đó không hoạt động, bạn có thể chạy cài đặt trình soạn thảo từ bên ngoài SSH trong máy ảo của mình .

Điều này sẽ bỏ qua mọi thời gian chờ chia sẻ NFS và giải nén Drupal ở đúng nơi.


0

"Drupal / core": "~ 8.0-beta14" có nghĩa là bất kỳ bản phát hành nào lớn hơn 8.0-beta14 và dưới 9! Bạn sẽ muốn xóa dấu ngã để khóa nó thành một bản phát hành cụ thể. Sau đó, đảm bảo cập nhật tệp khóa của bạn bằng cách chạy trình soạn thảo và trên hệ thống đích sử dụng cài đặt trình soạn thảo.

Một cách dễ dàng để bắt đầu là xây dựng cơ sở mã bằng cách sử dụng https://github.com/drupal-composer/drupal-project .

Khi chúng tôi cần cập nhật một cái gì đó như nâng cấp lõi, bạn chạy "trình soạn thảo" cục bộ. Điều này sẽ cập nhật tệp composer.lock.

Khi các nhà phát triển khác kéo xuống hoặc trong tập lệnh triển khai, bạn sẽ chạy "cài đặt trình soạn thảo", sử dụng tệp khóa.

Dòng trong composer.json của chúng tôi cho lõi Drupal là:

"drupal/core": "~8.0",

Dấu ngã () có nghĩa là bất kỳ bản phát hành nào trong số 8 (nhưng không phải là 9) .

Nếu bạn muốn khóa nó thành một phiên bản cụ thể, bạn không nên sử dụng dấu ngã.

"drupal/core": "8.0-beta14",

sau đó chạy "trình soạn thảo" cục bộ, cam kết tệp composer.json và composer.lock và sau đó chạy "cài đặt trình soạn thảo" trên các bản cài đặt khác sau khi kéo xuống cơ sở mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.