Saya memperluas modul yang saya tulis sebelumnya dan perlu beberapa perubahan skema yang saya implementasikan hook_update_N
.
Saya telah memperbarui versi modul dari 7.x-1.0
ke 7.x-1.1
dan menerapkan foo_update_7100
dan berfungsi dengan baik.
Masalahnya adalah bahwa saya telah membuat kesalahan di dalam foo_update_7100
dan sekarang saya sudah memperbaikinya saya tidak bisa memutakhirkan pembaruan 7100. Saya perlu membuat 7101 tapi itu tidak masuk akal karena semua perubahan saya belum dilakukan.
Saya sudah mencoba mengatur ulang status hook_update_n melalui:
update system set schema_version=-1 where name='foo';
> Query OK, 1 row affected (0.01 sec)
> Rows matched: 1 Changed: 1 Warnings: 0
Kemudian saya lakukan drush cc all
tetapi drush updatedb -y
masih memberi saya "Tidak diperlukan pembaruan basis data".
Bagaimana saya bisa menyelesaikan ini alih-alih hanya menambah hook_update_N
nomor?
-1
modul tersebut tidak diinstal. Jangan ragu untuk memposting itu sebagai jawaban sehingga saya bisa menerimanya.Jawaban:
Mengaturnya ke 0 harus bekerja.
system_schema()
mengatakan nilainya harus:sumber
-1
akan muncul untuk modul yang Drupal mengatakan yang diaktifkan?FYI, di Drupal 8, tabel sistem telah dihapus, dan informasi ini sekarang disimpan dalam tabel key_value .
(Seperti disebutkan di atas, nilai aktual harus kurang dari hook_update_N () yang ingin Anda ulangi, tetapi lebih tinggi dari atau cocok dengan pembaruan terakhir yang tidak perlu diulang.)
sumber
Saya melakukan ini sangat banyak sehingga saya akhirnya menulis modul drush untuk memutar kembali versi pembaruan di tabel sistem. Disebut "uroll" untuk pembaruan rollback.
https://github.com/danshumaker/drush-uroll
Penggunaan: drush uroll --module = mycustommodule --version = 5
Ini sangat sederhana tetapi saya menggunakannya sepanjang waktu. Ini dikombinasikan dengan skrip memuat kembali basis data memungkinkan Anda untuk membilas dan mengulangi saat menulis fungsi pembaruan.
Semoga bermanfaat buat kamu. Semoga berhasil.
sumber
--module=mymodule --version=7299
mengatur tabel sistem sebelum Anda. Jadi pada dbup berikutnya 7300 Anda dijalankan. Jadi, tidak, jangan hanya memberikan dua digit terakhir tetapi seluruh angka yang melewati angkamymodule_update_
9123667 .. :) @Eelke juga memiliki deskripsi yang baik dalam jawabannya.Untuk menjalankan hook pembaruan Anda lagi, Anda harus mengatur schema_version ke 1 di bawah nomor urut hook Anda .
Secara teknis, apa pun di bawah kait yang ingin Anda jalankan kembali dan di atas kait pembaruan Anda tidak perlu / ingin menjalankan kembali (tetapi setidaknya 0; -1 berarti modul tidak diinstal) tidak apa-apa; jika tidak ada kait pembaruan lain, itu berarti bahwa bahkan 0 jatuh di antara batas-batas itu, tetapi dalam kasus khas, kait pembaruan diperbarui satu, jadi hanya naik 1 yang lebih rendah adalah satu-satunya pilihan aman jika Anda tidak ingin menjalankan lebih banyak kode dari kait pembaruan tertinggi saat ini.
Proses pembaruan cukup memeriksa nilai itu, dan melihat apakah ada kait pembaruan dengan nomor urut yang lebih tinggi. Jika demikian, itu akan menjalankannya secara berurutan. (Ini juga berarti bahwa proses instalasi menetapkan versi skema ke yang sesuai dengan kait pembaruan tertinggi yang tersedia; itu mengasumsikan bahwa pada saat instalasi, modul Anda akan memiliki status yang sesuai dengan kait pembaruan terakhir).
sumber