단일 모듈에 대한 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 updatedbMYMODULE_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.