단일 모듈에 대한 drush updatedb


28

drush를 통해 단일 모듈의 업데이트 기능을 수행 할 수 있습니까? drush updatedb어떤 모듈 이름을 인수로 사용하지 않고 사용 가능한 모든 업데이트를 실행하는지 확인할 수 있습니다. 그런 다음 drush pm-update새 파일을 검사 할 수도 있습니다. 문서는 말합니다 :

(pm-updatecode + updatedb와 동일)

내가 실행하는 경우이 의미 하는가 drush pm-update가능한 모든 (새로운 update_function 종료) 업데이트가 perfomed됩니다? 정확히 하나의 모듈 만 (db) 업데이트하는 방법이 있습니까?


나는이 질문이 꽤 오래되었다는 것을 알고 있지만 궁금하다. 왜 그런 것을 원 할까? 일반적으로 모든 코드는 db가 최신 상태라는 가정을 기반으로합니다. 특정 모듈의 db 업데이트를 실행하지 않으려면 전체 모듈을 이전 버전으로 되 돌리지 않아야합니까?
— marcvangend

1
1 년 후. 나는 이것을 위해 이것을 필요로했다 : 나는 커스텀 모듈을 만들었지 만 나중에 테이블 레이아웃을 개발 단계에서 변경 했으므로 새로운 스키마로 db를 업데이트하는 것이 편리 할 것이다.
— Maarten Hartman

답변:


10

아냐, 못해

각 모듈을 자체적으로 업데이트하려면 단일 모듈의 파일 만 업데이트 한 다음 updatedb를 실행하십시오.


사용에 대한 아래 의견을 참조하십시오 drush dl(이전 모듈을 먼저 삭제하여 새 버전 용이 아닌 오래된 파일을 보관하지 않으려는 경우가 있습니다!)
— doublejosh

돌진 밖에서 이것을 할 수있는 방법이 있습니까?
— lathomas64

2
@ahimsauzi 님이 정답을 제시했습니다
— cybercampbell 2012 년

21

Drush 5.7에서는 명령을 실행할 수 있습니다 drush pm-update --no-core module-name. Drush는 현재 모듈을 자동으로 백업하고 새 버전을 다운로드 한 후 데이터베이스를 업데이트하라는 메시지를 표시합니다.


6
업데이트 한 모듈의 업데이트뿐만 아니라 보류중인 모든 업데이트가 실행됩니다.
— moshe weitzman 18

모쉐, 분명히 할 수 있습니까? 위의 명령을 실행하고 있으며 Drush가 보류중인 모든 업데이트를 확인하더라도 지정된 모듈 (위의 module-name) 만 업데이트됩니다. 뭔가 빠졌습니까?
— ahimsauzi

6
보류중인 모든 코드 업데이트를 확인하고 지정된 모듈의 코드 만 업데이트하지만 모든 데이터베이스 업데이트를 처리 합니다.
— meustrus

8

drush eval foo_update_33()예를 들어 하나의 업데이트 만 실행하려는 경우을 실행할 수 있습니다 . 실제로는 .install 파일을로드해야하지만 그다지 많지는 않지만 약간 복잡합니다.

@macaleaa 솔루션을 시도해 볼 수도 있습니다.

drush php-eval 'module_load_install('my_module');my_module_update_7XXX();'


3
누군가가 Drush를 위해 Contrib 확장 프로그램을 만들어 선택한 업데이트를 실행할 수 있다면 좋을 것이라고 덧붙입니다. 그것은 일반적으로 안전한 일이 아니지만 때로는 위험하게 살아야합니다. (필자는 Drush 메인테이너 오전) 아니지만 핵심 Drush에 적합한
— 모세를 이츠 먼

2
코어 드 러쉬에 적합하지 않은 이유는 무엇입니까? 누군가가 특정 순서 의 데이터베이스 업데이트 (이미 다운로드 된 코드의 경우) 를 시행 할 수 없습니까?이 경우 각 개별 모듈을 별도로 업데이트해야합니까? 나는 그런 상황에 처해있다.
— meustrus

여기서 33은 어디에서 오나요? foo는 모듈의 기계 이름입니까?
— lathomas64

33은 업데이트 기능 이름의 일부이며 순서를 결정합니다. 예, foo는 모듈의 머신 이름입니다. foo.install에서 함수를 찾을 수 있습니다. 예를 들어, devel.install에있는 devel 모듈에는 몇 가지 업데이트 기능이 있습니다. function devel_update_7000가장 낮은 번호를 가진 모듈 이며 먼저 실행됩니다 function devel_update_7001.
— Ursula

3
다음은 설치 파일을 먼저로드하는 예입니다.drush php-eval 'module_load_install('file_entity');file_entity_update_7211();'
— mcaleaa

5

둘 다 drush up someproject 아니고 모듈 drush upc someproject만 업데이트하는 것 같습니다 someproject. 원하는 다른 방법은 다음과 같습니다.

drush dl someproject #use --select option to be prompted for a module version
                     #this will overwrite your exising module's files
                     #backup your modules files with --backup, yourself, use a VCS to revert
drush updb           #run available database update scripts

다음은 Drupal.org와 비슷한 주제입니다.조심해!


방금 시도했지만 drush up someproject작동하지만 불행히도 기본적으로 활성화 된 모듈에 대해 사용 가능한 모든 업데이트를 확인 하고 ( 필수는 아님) 일부에 "업데이트 가능" 을 쓰지만 특정 프로젝트 만 업데이트합니다. 스크린 샷은 다음과 같습니다. i.imgur.com/TDDmB.png . 보시다시피 여러 업데이트를 사용할 수 있지만을 사용하여 xmlsitemap 만 업데이트됩니다 drush up xmlsitemap.
— Sk8erPeter

4

Drush 5.9를 사용하고 있으며이 명령으로 단일 모듈을 성공적으로 업데이트 할 수 있습니다.

drush dl *project*

예를 들어 'devel'모듈을 업데이트하려면 다음을 수행하십시오.

drush up devel

1

나는 이것이 다음을 사용하여 Drush에서 가능하다고 생각합니다 up.

drush up module_name

0

업데이트 함수 ( MYMODULE_update_7101)로 만든 테이블이 있지만 캐시에서 거의 모든 drush 호출의 코드 어딘가에서 해당 테이블에 액세스 한 상황이 있습니다 (기본적으로 모든 메뉴의 항목 유형 이름 및 기타 항목을 얻었습니다) 그밖에). 러닝 drush updatedb은 MYMODULE_update_7101첫 번째가 아닌 세 번째로 실행 되었습니다 .

@macaleaa와 @moshe weitzman이 제안한 솔루션을 시도했습니다.

drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'

실행하기 전에 drush updatedb도움이되지 않았습니다 . 테이블을 이미 updatedb실행 했다는 이유로 다시 실행을 시도 MYMODULE_update_7101()하고 오류가 발생 하여 drush 실행이 실패했습니다 . 기본적으로 위 코드는 업데이트를 실행했지만 업데이트가 실행 된 시스템에는 해당 표시를 남기지 않았습니다. 아마도 다른 많은 것들이 있습니다.update.php 모듈에 대한 최신 버전 번호를 DB 등에 저장하기 위해 각 업데이트를 실행 한 후에해야 할 일이 많이 있습니다.

내가 겪은 update.php실제로 각 업데이트 기능을 실행하는 방법과 그 후, 함수를 찾는 것은 업데이트 함수를 호출하고 또한 다른 모든 물건을 할 것이라고 전화를 않는 것을 볼 수 있습니다. 나는 이것을 얻었습니다.

include_once DRUPAL_ROOT . "/includes/update.inc";
$c["results"]["#abort"] = array();
update_do_one("MYMODULE", 7101, array(), $c);

내가 실제로 돌진으로 달렸다.

drush eval 'include_once DRUPAL_ROOT . "/includes/update.inc"; $c["results"]["#abort"] = array(); update_do_one("MYMODULE", 7101, array(), $c);'

업데이트를 실행했지만 아무런 문제가 없었지만 실행했을 때 MYMODULE 버전 7101이 업데이트 목록에 계속 나타납니다. updatedb 사이트 검사에서 모든 것이 좋아 보였습니다.

약간 해키와 6 년 늦었지만 모든 것이 잘 끝나는가?

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