更新関数(MYMODULE_update_7101
)によってテーブルが作成された状況がありましたが、そのテーブルはすべてのキャッシュクリアおよびほぼすべてのdrush呼び出しのどこかでコードでアクセスされていました(基本的にはすべてのメニューなどのエンティティタイプの名前を取得していましたその他)。実行中drush updatedb
はMYMODULE_update_7101
、最初ではなく3番目に実行されていました。
私は@macaleaaと@moshe weitzmanが提案する解決策を試してみました:
drush php-eval 'module_load_install('MYMODULE');MYMODULE_update_7101();'
実行する前drush updatedb
に、これは助けになりませんでした- updatedb
実行MYMODULE_update_7101()
を再試行し、テーブルが既に存在すると言ってエラーを出したため、drush runは失敗しました。基本的に、上記のコードは更新を実行していましたが、更新が実行されたことをシステムに残していませんでした。おそらく、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年遅れですが、すべてが順調に終わりましたか?