Berikut ini adalah OK untuk patch rilis 8.4.x> 8.4.y , tapi tidak OK untuk rilis minor 8.4.x> 8.5.x . Lompat ke UPDATE 3 di bawah untuk apa yang saya yakini sebagai "jawaban" untuk pembaruan rilis minor.
1- Cadangkan semua file yang datang dengan Drupal yang telah Anda modifikasi, seperti .htaccess, robots.txt, dll. (Kedua file tersebut adalah yang paling sering diubah).
2- [Saya diberitahu hapus file kunci salah, lihat PEMBARUAN di bawah ini] Hapus file composer.lock (di folder tingkat atas situs Anda). Ini akan dibuat ulang pada langkah 5.
3- Periksa composer.json Anda (di folder tingkat atas situs Anda) dan pastikan bahwa "drupal: core" ada di bagian yang diperlukan dan bukan di bagian ganti, misalnya
"require": {
"drupal/core": "^8.4"
},
tidak
"replace": {
"drupal/core": "^8.4"
},
Jika "drupal / core" ada di bagian ganti, pindahkan ke bagian yang diperlukan dan hapus bagian ganti. Jika ada entri lain di bagian ganti, cukup hapus "drupal / core" bukan seluruh bagian ganti - tapi saya pikir "drupal / inti" biasanya satu-satunya yang ada di sana.
Masukkan versi apa yang ingin Anda perbarui di "drupal / core", contoh:
"drupal / core": "^ 8.5" - akan memperbarui ke versi 8.5 terbaru. "drupal / core": "8.4.6" - akan diperbarui ke versi 8.4.6.
5- Jalankan ini (di folder tingkat atas situs Anda):
composer update drupal/core --with-dependencies
6- Jika tidak ada kesalahan, maka lakukan yang biasa, jalankan pembaruan dan hapus cache:
drush updatedb
drush cr
Atau jika tidak menggunakan drush, buka /update.php untuk menjalankan pembaruan, lalu ke admin / config / development / performance dan tekan tombol "Bersihkan semua cache".
7- Jika Anda telah membuat cadangan file di langkah pertama (.htaccess, robots.txt) masukkan kembali. Tetapi periksa untuk melihat apakah Drupal membuat pembaruan untuk file-file itu dan menambahkan perubahan itu ke Anda.
DIBUAT
Jika ada kesalahan dengan pembaruan komposer di langkah 5, biasanya karena masalah dengan versi barang di folder vendor.
Ini adalah pos yang bagus dalam menangani masalah-masalah seperti: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update dan baca 2 posting Jeff lainnya tentang Drupal dan Komposer untuk mendapatkan lebih banyak pengetahuan tentang itu.
Saya diberitahu oleh 2 orang di Twitter bahwa komposer. Kunci tidak boleh dihapus (Langkah 2 di atas). The composer update drupal/core --with-dependencies
perintah recreates file kunci lagian.
Dalam pengujian metode ini saya menemukan itu berfungsi dengan baik untuk 8.4.3> 8.4.6 (misalnya) tetapi saya mendapatkan kesalahan untuk 8.4.6> 8.5.x. Akan melaporkan kembali ketika saya mengetahuinya.
Contoh kesalahan:
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].
Posting ini oleh Jeff Geerling membahas masalah serupa, tetapi sejauh ini tidak berhasil bagi saya: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
Jadi ... satu-satunya hal yang tampaknya bekerja untuk saya untuk 8.4.x> 8.5.x adalah "opsi nuklir" yang tampaknya banyak orang lain gunakan, yang dijalankan composer update
.
Saya kira itu OK asalkan Anda yakin tentang versi modul di composer.json. Mungkin kita harus mengunci mereka ke versi saat ini. Sebagai contoh:
"drupal/address": "1.3"
daripada:
"drupal/address": "^1.3"
Tetapi apakah jawaban yang benar?
OK jawaban yang tampaknya ada di mana-mana adalah melakukan "opsi nuklir":
A. Hapus /vendor
folder.
B. Jalankan composer update
dan cukup perbarui modul Anda bersama dengan inti. Atau, kunci versi modul composer.json
jika Anda tidak ingin memperbaruinya.
Satu orang di Drupal Slack mengatakan "seluruh filosofi Komposer adalah bahwa Anda harus selalu memperbarui paket, sesering mungkin" . Dikemas termasuk modul saya pikir. Jadi masuk akal kurasa.
Setelah saya dapatkan dari 8.4.6 ke 8.5.0, ini bekerja dengan baik untuk mendapatkan dari 8.5.0 ke 8.5.1 composer update drupal/core --with-dependencies
seperti yang dilakukan untuk 8.4.3 hingga 8.4.6.
Saya mulai menyimpulkan bahwa "jawabannya" adalah menghapus folder vendor dan file composer.lock, kemudian menggunakan composer update
baik-baik saja, dan orang hanya perlu memastikan nomor versi untuk dependensi dalam file composer.json adalah apa yang Anda inginkan . Bukan masalah besar untuk mengelola versi modul yang ingin Anda pertahankan atau perbarui composer.json
.
Sebagai contoh:
"drupal/admin_toolbar": "1.18",
berarti tetap dengan 1,18
"drupal/admin_toolbar": "^1.18",
berarti maju dan perbarui tetapi dalam 1.x (bukan 2.x)
Ini didukung oleh komentar (Jenderal Redneck) pada posting ini: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update
"Salah satu hal yang saya miliki ditemukan ketika saya bekerja dalam dukungan adalah bahwa mengunci versi modul dan inti adalah ide yang baik sehingga Anda BISA thermonuke hal ketika Anda inginkan karena ada kalanya beberapa plugin yang berbeda bahkan tidak ingin berperilaku dengan benar. "
Ngomong-ngomong, file composer.lock tidak membantu composer update
karena terhapus (berbeda dengan composer install
tempat dia mengunci file dibaca):
Menjalankan composer install
akan:
- Periksa apakah
composer.lock
ada
- Jika tidak, lakukan a
composer update
untuk membuatnya
- Jika
composer.lock
ada, instal versi yang ditentukan dari file kunci
Menjalankan composer update
akan:
- Memeriksa
composer.json
- Tentukan versi terbaru untuk menginstal berdasarkan spesifikasi versi Anda
- Instal versi terbaru
- Pembaruan
composer.lock
untuk mencerminkan versi terbaru yang diinstal
Ref: https://www.engineyard.com/blog/composer-its-all-about-the-lock-file
Saya melihat ini disebutkan di atas: https://github.com/drupal-composer/drupal-project . Saya telah menggunakan itu dan itu baik-baik saja tetapi itu bukan persyaratan untuk menggunakan Komposer dengan Drupal. Ini membingungkan karena itu semacam "terdengar" seperti dari namanya. Ketika saya pertama kali mulai dengan Drupal 8 saya pikir itu diperlukan, jadi buat situs D8 pertama saya dengan itu, berpikir itu adalah praktik terbaik.
Itu "versi" dari Drupal telah dia docroot di folder / web, bukan di folder atas proyek. Juga ada banyak hal yang ditambahkan ke .gitignore dibandingkan dengan Drupal normal:
/drush/contrib/
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
Jadi, versi Drupal ini benar-benar lebih ditujukan untuk situs yang menggunakan integrasi berkelanjutan untuk melakukan pembangunan Drupal baru pada setiap penyebaran, menggunakan pemasangan komposer. Jika Anda menggunakan metode yang lebih normal, Anda jelas harus mengkomit semua hal di atas ke repositori git Anda atau itu tidak akan disebarkan ke server Anda [1], dan semua itu diperlukan agar Drupal dapat berjalan.
[1] jika git terlibat dengan penyebaran Anda - jika Anda menggunakan SFTP, abaikan ini.