it-swarm-vi.com

drush updateb cho một mô-đun duy nhất

Có thể thực hiện chức năng cập nhật của một mô-đun thông qua drush không? Tôi có thể thấy drush updatedb không lấy tên mô-đun làm đối số và chạy tất cả các bản cập nhật có sẵn. Sau đó có drush pm-update cũng sẽ kiểm tra các tập tin mới. tài liệ nói:

(giống như pm-updatecode + updateb)

Điều này có nghĩa là nếu tôi chạy drush pm-update mọi cập nhật có sẵn (bản cập nhật update_feft mới hơn) sẽ được thực hiện? Có cách nào để chỉ (db) cập nhật chính xác một mô-đun không?

28
nonsenz

Không, bạn không thể.

Nếu bạn muốn tự cập nhật từng mô-đun, chỉ cập nhật các tệp của một mô-đun và sau đó chạy updateb.

10
Berdir

Trên Drush 5.7 bạn có thể chạy lệnh drush pm-update --no-core module-name. Drush sẽ tự động sao lưu mô-đun hiện tại, tải xuống phiên bản mới và Nhắc bạn cập nhật cơ sở dữ liệu.

22
ahimsauzi

Nếu bạn muốn chạy chỉ một bản cập nhật, bạn có thể chạy drush eval foo_update_33(), chẳng hạn. Trong thực tế, nó phức tạp hơn một chút khi bạn phải tải tệp .install nhưng không nhiều.

Bạn cũng có thể thử giải pháp @macaleaa:

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

8
moshe weitzman

cũng không drush up someproject, cũng không drush upc someproject dường như chỉ cập nhật mô-đun someproject. Một cách khác để những gì bạn muốn là thông qua:

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

Đây là thảo luận về một chủ đề tương tự trên Drupal.org. Hãy cẩn thận!

5
myselfhimself

Tôi đang sử dụng Drush 5.9 và có thể cập nhật một mô-đun duy nhất thành công với lệnh này:

drush dl *project*

Vì vậy, ví dụ, để cập nhật mô-đun 'phát':

drush up devel
4
Rod

Tôi tin rằng điều này hiện có thể với Drush, sử dụng up:

drush up module_name
1
zgreen

Tôi đã có một tình huống trong đó một bảng được tạo bởi một hàm cập nhật (MYMODULE_update_7101), Nhưng bảng đó đã được truy cập bằng mã ở đâu đó trong mỗi bộ nhớ cache và hầu như mọi cuộc gọi drush (về cơ bản là nhận được tên của các loại thực thể cho tất cả các menu và bất cứ điều gì khác). Chạy drush updatedb Đã chạy MYMODULE_update_7101 Thứ ba thay vì đầu tiên.

Tôi đã thử giải pháp được đề xuất bởi @macaleaa và @moshe weitzman về việc chạy:

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

trước khi chạy drush updatedb, nhưng điều này không có ích - chạy drush không thành công vì updatedb đã thử chạy lại MYMODULE_update_7101() và bị lỗi, cho biết bảng đã tồn tại. Về cơ bản, đoạn mã trên đã chạy bản cập nhật, nhưng không để lại dấu ấn trên hệ thống mà bản cập nhật đã được chạy. Có lẽ có cả đống thứ khác update.php Phải làm sau khi chạy mỗi bản cập nhật để lưu số phiên bản mới nhất cho mô-đun trong db, v.v.

Tôi đã đi qua update.php Để xem cách nó thực sự chạy từng chức năng cập nhật và những gì nó làm sau đó, tìm kiếm một chức năng để gọi đó sẽ gọi chức năng cập nhật và cũng thực hiện tất cả các công cụ khác. Tôi đã kết thúc việc này:

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

Mà tôi thực sự chạy với drush:

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

Nó chạy bản cập nhật, không có vấn đề gì, nhưng sau đó phiên bản MYMODULE 7101 vẫn xuất hiện trong danh sách cập nhật khi tôi chạy updatedb, ALTHOUGH nó chạy mà không bị lỗi và mọi thứ đều tốt khi kiểm tra trang web.

Một chút hack và trễ 6 năm, nhưng tất cả đều kết thúc tốt đẹp?

0
nerdlinger