Doğru besteci tabanlı çekirdek güncelleme iş akışı nedir?


16

Besteci Drupal 8 bağımlılıklarını yönetmek için kullanmak istiyorum, ancak doğru çekirdek güncelleme iş akışının ne olduğundan emin değilim. Şu anda en son beta sürümüne çekirdek güncellemek için drush kullanıyorum, ancak composer.json dosyamda da bazı bağımlılıklar var, bu yüzden güncellemeden sonra tüm katkıda bulunan satıcı bağımlılıklarını yüklemek için besteci yüklemesini kullanıyorum. composer installÇekirdeği en son sürüme güncelledim, ancak çalışan çekirdek dizindeki bazı dosyaları geçersiz kılıyor gibi görünüyor .

Ayrıca composer.json dosyasını el ile düzenlemeye ve "drupal / core" satırını belirli beta sürümü ile değiştirmeye çalıştım "drupal/core": "~8.0-beta14",, ancak yine de çekirdek dizindeki dosyaları geçersiz kılar.

Doğru iş akışı nedir?

Yanıtlar:


11

Projeniz için drupal besteci / drupal projesini kullandığınızı varsayıyorum . Değilse, o projeye bir göz atın ve kendinizinkilerle karşılaştırın.

Ayrıca, Drupal 8 bağımlılıklarını yönetmek için besteci kullanmak istediğinizi söylediniz, bu yüzden katkı modüllerinizi composer require drupal/develyerine yerine seçtiğinizi varsayıyorum drush dl devel.

Tüm bunları yapıyorsanız, composer updateDrupal çekirdeğini ve tüm katkıda bulunan modüllerinizi güncellemek için kullanmalısınız . composer.lockDosyanızı koruduğunuz sürece composer install, herhangi bir bağımlılığınızın sürümünü değiştirmemelisiniz. Hiç kullanmamalısınız drush pm-update. coreBu dizin Composer tarafından yönetildiği için dizindeki dosyaların güncellenip güncellenmeyeceği önemli değildir. İsterseniz besteci tarafından yönetilen dizinleri deponuza göndermemek daha iyidir.

Tabii ki, çalışması gerektiğini drush updatedbher composer updateDrupal çekirdeğini ya da herhangi bir modül yerine geçer.

Geliştirme sürümlerini almaktan kaçınmak için, Composer kararlılık bayraklarını kullanarak minimum kararlılığınızı composer.json dosyanızda 'beta' olarak ayarlayın .

Sitenizi yönetmek için drupal-composer / drupal-project kullanıyorsanız, README.txt, .htaccess ve index.html gibi kök düzeyindeki tüm dosyalar projenize aittir. Bu, onları git deponuza teslim etmeniz gerektiği anlamına gelir; Besteci bunları güncellemez, değiştiklerinde kendiniz güncellemelisiniz. Bu dosyalar çok nadiren değişmelidir, ancak drupal-composer / drupal-project'in bu dosyaları güncellemek için bir komut dosyası vardır .


Sağlam pm-update yerine besteci güncellemesi kullandığımı varsayalım, README.txt, .htaccess, vb. Gibi dosyaları nasıl güncelleyebilirim? Ve nasıl gelmek drush güncelleme besteci güncelleme farklı çekirdek verir? Ve her güncellemeden önce drupal'ın composer.json'umun sürümünü 8.0-betaX ile değiştirmeli miyim? Dev kullanmak istemiyorum. sürüm ..
rreiss

Yanıt güncellendi.
greg_1_anderson

+1 greg_1_anderson - bu harika görünüyor, bu Drupal 8 için güvenlik güncellemeleri yapmanın kesin yolu mu? D7 ile, bu: drupal.stackexchange.com/a/71578
therobyouknow

Bu, Drupal 8.1'i bu adımlarla başlangıçta yüklediyse işe yarar: drupal.org/node/2471553 (Bunu hatasız çalışmak için buldum)
therobyouknow

"Elbette, drush updatedbbesteci güncellemesi Drupal çekirdeğinin veya herhangi bir modülün yerini aldığında çalıştırmalısınız ." - teşekkür ederim ve başlangıçta bu adımlarla drupal yüklediyseniz, drupal.org/node/2471553 o zaman Drupal 8 kurulumunuzla belirli bir drush için tam yola ihtiyacınız var (kurulumu son adım olarak çalıştırıyorlardı). Önce web cd gerekir ve bir kez / web db tam yolu ile güncelleştirmek için komut bu nedenle olurdu: ../vendor/drush/drush/drush updatedb(Bu işe yaradığını buldum).
therobyouknow

2

8.4.x> 8.4.y yama sürümleri için aşağıdaki gibidir , ancak 8.4.x> 8.5.x küçük sürümler için uygun değildir . Küçük sürüm güncellemeleri için "cevap" olduğuna inandığım şey için aşağıdaki GÜNCELLEME 3'e atlayın .

1- Drupal ile gelen, .htaccess, robots.txt vb. Gibi değiştirilmiş tüm dosyaları yedekleyin (en sık değiştirilenler 2'dir).

2- [Kilit dosyasının silinmesinin yanlış olduğu söylendi, aşağıdaki GÜNCELLEŞTİRİN] composer.lock dosyasını silin (sitenizin en üst düzey klasöründe). Bu, 5. adımda yeniden oluşturulur.

3- composer.json'unuzu ( sitenizin en üst düzey klasöründe) kontrol edin ve "drupal: core" un bir değiştirme bölümünde değil, zorunlu bölümde olduğundan emin olun.

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

değil

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

Değiştirme bölümünde "drupal / core" varsa, gereken bölüme taşıyın ve değiştirme bölümünü silin. Eğer değiştirme bölümünde başka girişler varsa, sadece tüm değiştirme bölümünü değil "drupal / çekirdek" kaldırmak - ama bence "drupal / çekirdek" normalde orada tek şeydir.

Güncellemek istediğiniz sürümü "drupal / core" içine koyun, örnekler:

"drupal / core": "^ 8.5" - 8.5'in en son sürümüne güncellenecektir. "drupal / core": "8.4.6" - 8.4.6 sürümüne güncellenecektir.

5- Bunu çalıştırın (sitenizin üst düzey klasöründe):

composer update drupal/core --with-dependencies

6- Hata yoksa, olağan işlemleri yapın, güncellemeleri çalıştırın ve önbelleği temizleyin:

drush updatedb
drush cr

Veya drush kullanmıyorsanız güncellemeleri çalıştırmak için /update.php adresine gidin, ardından admin / config / development / performance adresine gidin ve "Tüm önbellekleri temizle" düğmesine basın.

7- İlk adımda (.htaccess, robots.txt) dosyaları yedeklediyseniz, onları geri koyun. Ancak Drupal'ın bu dosyalarda güncelleme yapıp yapmadığını kontrol edin ve bu değişiklikleri kendi dosyalarınıza ekleyin.

YAPILAN

5. adımda besteci güncellemesinde hatalar varsa, bunun nedeni genellikle satıcı klasöründeki öğelerin sürümleriyle ilgili sorunlardır.

Bu, bu tür sorunlarla ilgilenmek için harika bir gönderi: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update ve Jeff'in Drupal ve Composer'daki diğer 2 yayınını okuyun bu konuda daha fazla bilgi.

Twitter'da 2 kişi tarafından composer.lock dosyasının silinmemesi gerektiği söylendi (yukarıdaki 2. Adım). composer update drupal/core --with-dependenciesKomut neyse kilit dosyasını yeniden oluşturur.

Bu yöntemi test ederken 8.4.3> 8.4.6 için iyi çalışıyor (örneğin) ama 8.4.6> 8.5.x için hatalar alıyorum. Anladýđým zaman rapor vereceđim.

Hatalara örnek:

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].

Jeff Geerling'in bu yayını benzer sorunları ele alıyor, ancak şu ana kadar bana şans getirmiyor: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update

Yani ... 8.4.x> 8.5.x için benim için işe yarayan tek şey, diğer pek çok kişinin kullandığı "nükleer seçenek" composer update.

Composer.json modül sürümleri hakkında emin olduğunuz sürece sorun yok sanırım. Belki de onları mevcut sürüme kilitlemelisiniz. Örneğin:

"drupal/address": "1.3"

ziyade:

"drupal/address": "^1.3"

Peki doğru cevap bu mu?

Tamam her yerde gibi görünen cevap "nükleer seçenek" yapmaktır:

A. /vendorKlasörü silin .

B. composer updateModüllerinizi çekirdek ile birlikte çalıştırın ve güncelleyin. Veya composer.jsongüncellemek istemiyorsanız modül sürümlerini kilitleyin .

Drupal Slack'deki bir kişi "Composer'ın tüm felsefesi, paketleri olabildiğince sık güncellemeniz gerektiğidir" dedi . Paketlenmiş bence modülleri içerir. Bu yüzden sanırım bir anlam ifade ediyor.

8.4.6'dan 8.5.0'a ulaştığımda, bu 8.4.3'den 8.4.6'ya olduğu gibi 8.5.0'dan 8.5.1'e ulaşmak için iyi çalıştı composer update drupal/core --with-dependencies.

Ben "cevap" satıcı klasörü ve composer.lock dosyasını silmek, sonra kullanarak composer updategayet olduğunu ve bir basit sadece composer.json dosyasında bağımlılıklar için sürüm numaralarının istediğiniz olduğundan emin olun sonucuna başlıyorum . Hangi modül sürümlerini saklamak istediğinizi veya güncellemenize izin vermek istediğiniz kadar büyük bir anlaşma değildir composer.json.

Örneğin:

"drupal/admin_toolbar": "1.18", 1.18 ile sopa anlamına gelir

"drupal/admin_toolbar": "^1.18", devam edip güncelleme anlamına gelir, ancak 1.x içinde (2.x değil)

Bu, bu yayına bir yorum (Genel Redneck) ile desteklenir: https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update "Yaptığım şeylerden biri Ben destek olarak çalışırken bulundu modüllerin ve çekirdek sürümlerini kilitlemek iyi bir fikir olduğunu, böylece istediğiniz zaman bir şey termonuke yapabilirsiniz çünkü çeşitli eklentileri bazı bile doğru davranmak istemiyorum zamanlar var. "

Bu arada, composer.lock dosyası yardım etmiyor composer updateçünkü havaya uçuyor ( composer installdosyayı kilitlediği yerin aksine ):

Koşu composer installolacak:

  • Bir kontrol edin composer.lockvarsa
  • Değilse, bir composer updatetane oluşturmak için
  • Varsa composer.lock, kilit dosyasından belirtilen sürümleri yükleyin

Koşu composer updateolacak:

  • Kontrol composer.json
  • Sürüm özelliklerinize göre yüklenecek en son sürümleri belirleyin
  • En son sürümleri yükleyin
  • composer.lockYüklü en son sürümleri yansıtacak şekilde güncelleme

Ref: https://www.engineyard.com/blog/composer-its-all-about-the-lock-file

Bunun yukarıda belirtildiğini görüyorum: https://github.com/drupal-composer/drupal-project . Bunu kullandım ve sorun değil ama Besteci Drupal ile kullanmak için bir gereklilik değil. Adından olduğu gibi "sesler" gibi kafa karıştırıcı. Drupal 8 ile ilk başladığımda bunun gerekli olduğunu düşündüm, bu yüzden ilk D8 sitemi bununla inşa ettim, en iyi uygulama olduğunu düşündüm.

Drupal'ın bu "sürümü", projenin en üst klasöründe değil, bir / web klasöründe doktora yaptı. Ayrıca .gitignore'a normal Drupal'a kıyasla bir sürü şey eklendi:

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

Bu nedenle, Drupal'ın bu sürümü, besteci yüklemesini kullanarak her dağıtımda yeni bir Drupal derlemesi yapmak için sürekli entegrasyon kullanan siteler için daha çok amaçlanmıştır. Daha normal bir yöntemle dağıtıyorsanız, yukarıdaki tüm şeyleri git repo'nuza tabi tutmanız gerekir, aksi takdirde sunucunuza dağıtılmaz [1] ve Drupal'ın çalışması için bunların hepsi gereklidir.

[1] git konuşlandırmanızla ilgiliyse - SFTP ile konuşlandırıyorsanız, bunu dikkate almayın.


composer update drupal/core symfony/config webflo/drupal-core-strict --with-dependenciesbeni henüz başarısızlığa uğratmadı. Birkaç küçük versiyon üzerinde çalışır, örneğin 8.3 -> 8.6
Clive

1

Packagist.org'daki drupal / core paketini kullanarak çekirdeği, katkıda bulunan modülleri (, temaları ve profilleri) ve diğer satıcıları besteci aracılığıyla yönetebiliriz.

Kök dizinime aşağıdaki dosyaları kurdum ve çalıştırdım 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

Zevk almak :)


Sanırım yaptığın tüm bu kıvrımlı sihire ihtiyacım olacak. Tüm bu gerekli dosyaların besteci tarafından yerine getirilmesini bekliyordum.
dxvargas

@hiphip Çekirdek dizinin dışındaki dosyalar sık ​​sık değişmez, bu nedenle yukarıdaki, bir küçük sürümden diğerine drupal güncelleme yaparken (yani 8.1'den 8.2'ye)
Eyal

1

Evet, besteci ile Drupal çekirdeğini yönetebilirsiniz. Dikkat edilmesi gereken birkaç şey var.

Özellikle yerel bir VM'de çalıştırıyorsanız, bestecinin çalışması gereken birkaç öğe nedeniyle zaman aşımına uğrarsınız. Çalıştırırsanız composer installbüyük olasılıkla besteci hatası alırsınız:

 [RuntimeException]                                    
  Could not delete core/.nfs0000000000000000000001:

Kullandığınızdan emin olun

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

Ayrıca yapılandırmadaki zaman aşımına bir uzantı ekleyin

    "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
       },

Ayrıca bu işe yaramazsa VM'nizdeki SSH dışından besteci yüklemesini çalıştırabilirsiniz .

Bu, NFS paylaşım zaman aşımlarını atlayacak ve Drupal'ı doğru yerde açacaktır.


0

"drupal / core": "~ 8.0-beta14", 8.0-beta14'ten büyük ve 9'dan küçük herhangi bir sürüm anlamına gelir! Belirli bir sürüme kilitlemek için yaklaşık işareti kaldırmak isteyeceksiniz. Ardından, bestecinizi çalıştırarak kilit dosyanızı güncellediğinizden emin olun ve hedef sistemde besteci yüklemesini kullanın.

Başlamanın kolay bir yolu, kod tabanını https://github.com/drupal-composer/drupal-project kullanarak oluşturmaktır .

Güncelleme çekirdeği gibi bir şeyi güncellememiz gerektiğinde, yerel olarak "besteci" yi çalıştırırsınız. Bu işlem composer.lock dosyasını güncelleyecektir.

Diğer geliştiriciler aşağı çekildiğinde veya bir dağıtım komut dosyasında kilit dosyasını kullanan "besteci yüklemesini" çalıştırırsınız.

Bestecimiz.json'daki Drupal çekirdeğindeki çizgi:

"drupal/core": "~8.0",

Tilde () , 8 sayı içindeki (ancak 9 değil) herhangi bir sürüm anlamına gelir .

Belirli bir sürüme kilitlemek istiyorsanız, tilde kullanmamalısınız.

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

sonra yerel olarak "composer up" komutunu çalıştırın, composer.json ve composer.lock dosyasını çalıştırın ve sonra kod tabanını aşağı çektikten sonra diğer kurulumlarda "composer install" komutunu çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.