올바른 작성기 기반 핵심 업데이트 워크 플로우는 무엇입니까?


16

작곡가를 사용하여 Drupal 8 종속성을 관리하고 싶지만 올바른 핵심 업데이트 워크 플로가 무엇인지 잘 모르겠습니다. 현재 drush를 사용하여 코어를 최신 베타 릴리스로 업데이트하고 있지만 composer.json 파일에도 일부 종속성이 있으므로 업데이트 후 composer install을 사용하여 모든 contrib 공급 업체 종속성을 설치합니다. composer install코어를 최신 버전으로 업데이트했지만 실행 은 코어 디렉토리의 일부 파일보다 우선합니다.

또한 composer.json 파일을 수동으로 편집하고 "drupal / core"행을 특정 베타 릴리스 (예 :)로 바꾸려고 "drupal/core": "~8.0-beta14",했지만 여전히 코어 디렉토리의 파일을 덮어 씁니다.

올바른 워크 플로우는 무엇입니까?

답변:


11

프로젝트 의 기반으로 drupal-composer / drupal-project 를 사용하고 있다고 가정합니다 . 그렇지 않은 경우 해당 프로젝트를보고 귀하의 프로젝트와 비교하십시오.

또한 작곡가를 사용하여 Drupal 8 종속성을 관리하고 싶다고 말했기 때문에을 사용 composer require drupal/devel하지 않고 contrib 모듈을 선택했다고 가정합니다 drush dl devel.

이러한 모든 작업을 수행하는 경우 composer updateDrupal 코어 및 모든 contrib 모듈을 업데이트 하는 데 사용해야 합니다. composer.lock파일 을 유지 composer install하는 한 종속성 버전을 변경해서는 안됩니다. 전혀 사용해서는 안됩니다 drush pm-update. core이 디렉토리는 Composer에 의해 관리 되므로 디렉토리의 파일 이 업데이트 되는지 여부는 중요 하지 않습니다. 원한다면 작곡가 관리 디렉토리를 저장소에 커밋하지 않는 것이 좋습니다.

물론 Drupal 코어 나 모듈을 교체 drush updatedb할 때마다 실행해야합니다 composer update.

개발 버전을 얻지 않으려면 Composer stability flags를 사용하여 composer.json 파일에서 최소 안정성을 'beta'로 설정하십시오 .

drupal-composer / drupal-project를 사용하여 사이트를 관리하는 경우 README.txt, .htaccess 및 index.html과 같은 모든 루트 레벨 파일이 프로젝트에서 소유합니다. 즉, git 저장소에 체크인해야합니다. Composer는 업데이트하지 않으므로 변경시 직접 업데이트해야합니다. 이러한 파일은 거의 변경되지 않지만 drupal-composer / drupal-project 에는 이러한 파일을 업데이트하는 스크립트가 있습니다 .


drush pm-update 대신 composer update를 사용한다고 가정합니다. README.txt, .htaccess 등과 같은 파일을 어떻게 업데이트합니까? Drush Update는 컴포저 업데이트와 다른 코어를 어떻게 제공합니까? 그리고 각 업데이트 전에 내 composer.json의 drupal 버전을 8.0-betaX로 바꿔야합니까? dev를 사용하고 싶지 않습니다. version ..
rreiss

답변을 업데이트했습니다.
greg_1_anderson

+1 greg_1_anderson-훌륭해 보입니다. Drupal 8의 보안 업데이트를 수행 할 수있는 확실한 방법입니까? D7의 경우 : drupal.stackexchange.com/a/71578
therobyouknow

다음 단계에 따라 Drupal 8.1을 처음 설치 한 경우 작동하는 것 같습니다. drupal.org/node/2471553 (오류없이 작동 함)
therobyouknow

"물론 drush updatedb작곡가 업데이트가 Drupal 코어 나 모듈을 대체 할 때마다 실행해야합니다 ." -감사합니다. drupal.org/node/2471553 단계를 통해 drupal을 처음 설치 한 경우 Drupal 8 설치와 함께 특정 단계에 대한 전체 경로가 필요합니다 (마지막 단계로 설치를 실행하는 데 사용됨). 먼저 웹에 cd하고 / web에 한 번 전체 경로를 사용하여 db를 업데이트하는 명령은 다음과 같습니다 ../vendor/drush/drush/drush updatedb(작동하는 것으로 나타났습니다).
therobyouknow

2

다음은 패치 릴리스 8.4.x> 8.4.y 에 대해서는 정상이지만 부 릴리스 8.4.x> 8.5.x에 대해서는 정상이 아닙니다 . 부 릴리스 업데이트에 대한 "답변"이라고 생각되는 부분은 아래 업데이트 3으로 이동하십시오 .

1- .htaccess, robots.txt 등과 같이 수정 한 Drupal과 함께 제공되는 모든 파일을 백업하십시오 (2가 가장 일반적으로 변경됨).

2- [삭제 파일 삭제가 잘못되었다고 들었습니다. 아래 업데이트 참조] composer.lock 파일을 삭제 하십시오 (사이트의 최상위 폴더에 있음). 이것은 5 단계에서 다시 작성됩니다.

3- 사이트의 최상위 폴더에있는 composer.json 을 확인하고 "drupal : core"가 replace 섹션이 아닌 require 섹션에 있는지 확인하십시오 (예 :

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

아니

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

"drupal / core"가 replace 섹션에 있으면 require 섹션으로 옮기고 replace 섹션을 삭제하십시오. 바꾸기 섹션에 다른 항목이 있으면 전체 교체 섹션이 아닌 "drupal / core"를 제거하십시오. 그러나 일반적으로 "drupal / core"가 유일한 것으로 생각합니다.

업데이트 할 버전을 "drupal / core"에 넣으십시오 (예 :

"drupal / core": "^ 8.5"-최신 버전 8.5로 업데이트됩니다. "drupal / core": "8.4.6"-버전 8.4.6으로 업데이트됩니다.

5- 이것을 사이트의 최상위 폴더에서 실행하십시오 :

composer update drupal/core --with-dependencies

6- 오류가 없으면 평소대로 업데이트를 실행하고 캐시를 지우십시오.

drush updatedb
drush cr

또는 drush를 사용하지 않는 경우 /update.php로 이동하여 업데이트를 실행 한 다음 admin / config / development / performance로 이동하여 "모든 캐시 지우기"버튼을 누르십시오.

7- 첫 단계에서 파일을 백업 한 경우 (.htaccess, robots.txt) 파일을 다시 넣습니다. 그러나 Drupal이 해당 파일을 업데이트했는지 확인하고 변경 사항을 귀하의 파일에 추가하십시오.

끝난

5 단계에서 작성기 업데이트에 오류가있는 경우 일반적으로 공급 업체 폴더의 항목 버전에 문제가 있습니다.

이 같은 문제를 다루는에 큰 게시물입니다 : https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update 및하려면 드루팔와 작곡가 제프의 다른이 개 게시물을 읽어 그것에 대한 더 많은 지식.

트위터에서 두 사람이 composer.lock을 삭제해서는 안된다고 들었습니다 (위의 2 단계). 이 composer update drupal/core --with-dependencies명령은 어쨌든 잠금 파일을 다시 작성합니다.

이 방법을 테스트 할 때 8.4.3> 8.4.6 (예 :)에서는 제대로 작동하지만 8.4.6> 8.5.x에서는 오류가 발생합니다. 내가 알아낼 때 다시보고합니다.

오류 예 :

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 의이 게시물은 비슷한 문제를 해결하지만 지금까지는 운이 없습니다 : https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update

그래서 ... 8.4.x> 8.5.x에서 저에게 효과가있는 유일한 것은 다른 많은 사람들이 사용하는 것처럼 보이는 "핵 옵션"입니다 composer update.

composer.json의 모듈 버전에 대해 확신하는 한 괜찮습니다. 어쩌면 현재 버전으로 고정해야 할 수도 있습니다. 예를 들면 다음과 같습니다.

"drupal/address": "1.3"

오히려

"drupal/address": "^1.3"

그러나 정답입니까?

OK는 모든 곳에서 "핵 선택"을하는 것입니다.

A. /vendor폴더를 삭제하십시오 .

B. composer update코어와 함께 모듈을 실행 하고 간단히 업데이트하십시오. 또는 composer.json업데이트하지 않으려면 모듈 버전을 잠그십시오 .

Drupal Slack의 한 사람은 "Composer의 전체 철학은 항상 가능한 한 자주 패키지를 업데이트해야한다는 것"이라고 말했습니다 . 패키지에는 내가 생각하는 모듈이 포함되어 있습니다. 그래서 내가 추측하는 것이 의미가 있습니다.

8.4.6에서 8.5.0에 도달하면 composer update drupal/core --with-dependencies8.4.3에서 8.4.6에서와 마찬가지로 8.5.0에서 8.5.1 로 올바르게 작동했습니다.

"답변"은 공급 업체 폴더와 composer.lock 파일을 삭제 한 다음 사용하는 composer update것이 좋으며 composer.json 파일의 종속성에 대한 버전 번호가 원하는지 확인해야한다는 결론을 내리기 시작했습니다 . . 어떤 모듈 버전을 유지하거나 업데이트 할 것인지 관리하는 것은 그리 큰 문제가 아닙니다 composer.json.

예를 들면 다음과 같습니다.

"drupal/admin_toolbar": "1.18", 1.18의 스틱을 의미

"drupal/admin_toolbar": "^1.18", 계속해서 업데이트하지만 1.x (2.x 아님) 내에 있음을 의미합니다.

이것은이 게시물에 대한 의견 (일반 Redneck)에 의해 뒷받침됩니다 : https://www.jeffgeerling.com/blog/2018/updating-drupalcore-composer-drupal-core-doesnt-update "내가 한 것 중 하나 내가 지원할 때 발견 한 것은 모듈과 코어의 버전을 잠그는 것이 좋은 생각이므로 여러 플러그인 중 일부가 제대로 작동하지 않기를 원할 때가 있기 때문에 원하는 때에 열을 가할 수 있다는 것이다. "

그건 그렇고, composer.lock 파일은 잠금 파일을 읽는 위치 composer update와 달리 날아 가기 때문에 도움이되지 않습니다 composer install.

러닝 composer install윌 :

  • composer.lock존재 하는지 확인
  • 그렇지 않은 경우 a composer update를 수행하여 하나를 만듭니다.
  • composer.lock존재하는 경우 잠금 파일에서 지정된 버전을 설치하십시오.

러닝 composer update윌 :

  • 검사 composer.json
  • 버전 사양에 따라 설치할 최신 버전 확인
  • 최신 버전 설치
  • composer.lock설치된 최신 버전을 반영하도록 업데이트

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

https://github.com/drupal-composer/drupal-project 위에 언급되어 있습니다 . 나는 그것을 사용했지만 괜찮지 만 Drupal과 함께 Composer를 사용할 필요는 없습니다. 이름에서 온 것처럼 "소리"와 같이 혼동됩니다. Drupal 8을 처음 시작했을 때 필요하다고 생각했기 때문에 D8 사이트를 구축하여 모범 사례라고 생각했습니다.

Drupal의 "버전"은 프로젝트의 최상위 폴더가 아닌 / web 폴더에 docroot를 가지고 있습니다. 또한 일반적인 Drupal과 비교하여 .gitignore에 추가 된 많은 것들이 있습니다.

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

따라서이 버전의 Drupal은 컴포저 설치를 사용하여 모든 배포에서 새로운 Drupal 빌드를 수행하기 위해 지속적인 통합을 사용하는 사이트에 더 적합합니다. 보다 일반적인 방법으로 배포하는 경우, 위의 모든 내용을 git repo에 커밋해야합니다. 그렇지 않으면 서버에 배포되지 않습니다 [1]. Drupal을 실행하려면 해당 내용이 모두 필요합니다.

[1] git이 배포와 관련된 경우-SFTP와 함께 배포하는 경우 무시하십시오.


composer update drupal/core symfony/config webflo/drupal-core-strict --with-dependencies아직 나를 실패하지 않았습니다. 여러 부 버전에서 작동합니다 (예 : 8.3-> 8.6
Clive

1

packagist.org 에서 drupal / core 패키지를 사용하여 실제로 composer 를 통해 코어, contrib 모듈 (테마 및 프로파일) 및 기타 벤더를 관리 할 수 ​​있습니다.

루트 디렉토리에 다음 파일을 설정하고 실행했습니다. 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

즐겨 :)


나는 당신이 한 모든 컬 마술이 필요할 것이라고 생각합니다. 필요한 모든 파일이 작곡가에 의해 작성 될 것으로 기대했습니다.
dxvargas 2016 년

@hiphip 코어 디렉토리 외부의 파일은 자주 변경되지 않으므로, 위의 버전은 하나의 부 버전에서 다음 버전 (즉 8.1-8.2)으로 드 루프 업데이트를 할 때 수동으로 수행하는 스크립트 일 수 있습니다.
Eyal

1

예, 작곡가로 Drupal 코어를 관리 할 수 ​​있습니다. 그러나 알아야 할 몇 가지 사항이 있습니다.

특히 로컬 VM에서 실행하는 경우 작곡가가 실행해야하는 많은 항목으로 인해 시간이 초과 될 수 있습니다. 실행 composer install하면 작곡가 오류가 발생합니다.

 [RuntimeException]                                    
  Could not delete core/.nfs0000000000000000000001:

당신이 필요로 사용하는지 확인

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

구성에서 시간 초과에 확장을 추가하십시오.

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

그래도 작동하지 않으면 VM의 SSH 외부에서 composer 설치 실행할 수 있습니다 .

이렇게하면 NFS 공유 시간 초과가 무시되고 Drupal의 압축이 풀립니다.


0

"drupal / core": "~ 8.0-beta14"는 8.0-beta14보다 크고 9보다 작은 릴리스를 의미합니다! 물결표를 제거하여 특정 릴리스에 고정 할 수 있습니다. 그런 다음 composer를 실행하여 잠금 파일을 업데이트하고 대상 시스템에서 composer install을 사용하십시오.

시작하는 쉬운 방법은 https://github.com/drupal-composer/drupal-project를 사용하여 코드베이스를 작성하는 것입니다 입니다.

코어 업그레이드와 같은 것을 업데이트해야 할 경우 로컬에서 "composer up"을 실행하십시오. composer.lock 파일이 업데이트됩니다.

다른 개발자가 풀다운하거나 배포 스크립트를 사용하는 경우 잠금 파일을 사용하는 "composer install"을 실행합니다.

Drupal 코어 용 composer.json의 라인은 다음과 같습니다.

"drupal/core": "~8.0",

물결표 () 는 8 개 숫자 (9 개 아님) 내의 모든 릴리스를 의미 합니다. .

특정 버전으로 고정하려면 물결표를 사용하지 않아야합니다.

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

그런 다음 로컬에서 "composer up"을 실행하고 composer.json 및 composer.lock 파일을 커밋 한 다음 코드베이스를 풀다운 한 후 다른 설치에서 "composer install"을 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.