업데이트를 다시 실행하려면 (모듈 스키마 버전 변경) 어떻게합니까?


22

모듈을 작업 중이며 스키마에서 몇 가지 필드 유형을 변경했습니다. 테스트하기 전에 백업을하지 않고 DB를 망쳤습니다 (개발 사이트 일뿐입니다). 어쨌든 모든 것을 다시 설치했으며 스키마 버전이 가장 높은 업데이트 버전으로 설정되었습니다. 그러나 실제로 업데이트를 실행해야합니다. 모듈 코드에 업데이트 된 스키마가있는 경우 설치하지 않은보기이므로이 업데이트를 테스트하는 좋은 방법이라고 생각했습니다.

모듈의 스키마 버전을 특정 버전으로 어떻게 재설정합니까? Drupal 7에서는 다음과 같이했습니다.

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

답변:


47

상태에 직접 액세스하는 동안 drupal_set_installed_schema_version () API를 사용할 수도 있습니다 . 링크 된 문서 페이지에서 볼 수 있듯이 실제로 4.7 이후로 변경되지 않은 것입니다. 아마도 오랫동안 존재했던 몇 가지 API 함수 중 하나 일 것입니다.)

돌진에서 설정하려면 :

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

참고 : Drupal 7에서는 추가를 추가해야합니다 include 'includes/install.inc';.


5
간단하게 확인해야 할 경우에도 좋습니다. drush ev "echo drupal_get_installed_schema_version ( 'MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

또는 drush pm-info modulename
Beanluc

10

Drupal 8은 이제 keyvalue서비스를 사용 하여 스키마 버전에 대한 정보를 저장합니다. 이것은 State API 자체가 사용 하는 것과 동일한 API 입니다.

값 정보는 데이터베이스에 저장 될 때 직렬화되므로 직접 SQL 쿼리를 사용하는 것이 적합하지 않습니다. 대신 drush php-eval(또는 Drush가없는 경우 Drupal을 부트 스트랩하는 스크립트)를 사용하여 다음을 실행하십시오.

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

변경 fillpdf8102각 모듈의 이름과 원하는 스키마 버전.

이 명령의 Drush 형식은 다음과 같습니다.

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

코드를 통해 모듈 업데이트를 설정하고 가져옵니다 (Drush없이). 아래는 코드입니다

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

데이터베이스에서 직접 업데이트 할 수도 있습니다. Sequel Pro (mac)와 같은 것을 사용하거나 Windows / Linux의 데이터베이스 UI 도구를 사용하는 경우 정말 쉽습니다. 아마도 최상의 아이디어는 아니며 프로덕션 레벨 데이터베이스에 대해이 작업을 수행하지 않는 것이 좋지만 작업이 완료됩니다!

테이블 = key_value

컬렉션 = system.schema
이름 = fillpdf (your_module)
값 = i : 8102로 업데이트;

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