Saya telah mencari jawaban untuk pertanyaan ini tanpa hasil sama sekali. Dari apa yang saya amati dalam struktur database, lokasi ke modul ditentukan dalam tabel 'sistem'. Satu-satunya solusi yang saya miliki adalah menulis kueri SQL untuk memperbarui kolom 'nama file'.
Apakah ada solusi yang lebih baik / lebih bersih dalam menyelesaikan ini, misalnya, modul contrib?
sumber
registry_file
tabel Anda , yang akan memaksa drupal untuk memindai ulang semua file dan membangun kembali tabel.DELETE FROM registry_file;
dan menambahkan panggilan kerebuild_registry()
dalampage.tpl.php
.Saya memulihkan cadangan dari produksi secara lokal dan mencoba untuk memindahkan barang-barang dan menekan admin / modul atau untuk menjalankan registry_rebuild () tetapi tidak menghentikan kesalahan fatal yang dilemparkan. Ini masuk akal bagi saya karena beberapa modul dapat menggunakan include atau apa pun di hook_init () mereka, atau Anda mungkin memiliki set path router menu yang tergantung pada sebuah modul atau menyertakan Drupal yang tidak dapat ditemukan pada bootstrap. Pada akhirnya, inilah yang saya lakukan (jalur Anda mungkin berbeda):
Langkah 1: Ganti situs / semua / modul dengan situs / semua / modul / contrib
Langkah 2: Ganti situs / semua / modul / contrib dengan situs / semua / modul / custom untuk modul dengan spasi nama kustom
Langkah 3: Pindahkan modul dev ke situs / semua / modul / dev
Langkah 4: Bersihkan cache sehingga semuanya bisa bootstrap dengan benar
Catatan: Jika Anda menggunakan modul khusus atau kontribus seperti LoginToboggan untuk menangani 403 (akses ditolak) dan Anda telah logout selama proses ini, Anda mungkin perlu memperbarui
include_file
kolom dimenu_roter
tabel untuk menggunakan jalur baru untuk file include. . Ini mungkin kejadian langka.UPDATE menu_router SET include_file = 'sites/all/modules/custom/my_custom_namespace/includes/foo.inc' WHERE path = 'access-denied'
Setelah kueri ini dijalankan - yang hanya membutuhkan waktu sepersekian detik - tekan admin / config / pengembangan / kinerja dan kosongkan cache sehingga jalur menu dibangun kembali.
sumber
update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.admin.inc' WHERE path = 'admin/config/system/logintoboggan'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'toboggan/revalidate/%'; update menu_router set include_file = 'sites/all/modules/contrib/logintoboggan/logintoboggan.validation.inc' WHERE path = 'user/validate/%/%/%';
Coba alat keren dari Mark Sonnabaum: Drush Rebuild Project Paths . Itu mengotomatiskan proses; bekerja sangat baik untuk saya. Menggunakan Drush , tentu saja.
Saya akan menyarankan kedua agar Anda mencoba ini pada salinan database situs Anda.
sumber
Sebagai catatan, ada perintah drush yang bagus untuk membangun kembali registri: http://drupal.org/project/registry_rebuild
Ada banyak informasi di halaman proyek.
sumber
sites/all/modules
yang harus dipindahkan kecontrib
subdirektori. Yang harus saya lakukan adalahdrush dl registry_rebuild; mv OLD_PATH/module NEW_PATH/module; drush rr
drush rr --fire-bazooka
mengarah ke kesalahan, tetapidrush rr
baik-baik saja.Pertama, selalu buat cadangan database Anda, begitu mudahnya Anda akan menendang diri sendiri jika terjadi kesalahan dan Anda tidak membuat cadangan.
Saya tidak yakin apakah itu penting jika Anda menonaktifkan modul atau tidak; Anda mungkin ingin melakukannya, untuk berjaga-jaga. Kemudian lakukan ini:
Semua selesai! Drupal akan mencari kembali semua modul yang diinstal.
sumber
Mengapa Anda tidak mencoba modul Membangun Kembali Registry . Itu bekerja setiap saat untuk saya.
Berikut ini adalah kutipan tentang hal itu (dari halaman proyek modul):
sumber
Anda dapat menggunakan modul Registry Rebuild , yang terintegrasi dengan Drush melalui
Drush RR
perintah.Pada dasarnya yang Anda lakukan adalah langkah-langkah ini:
Saya pertama kali belajar / menemukannya melalui DrupalEasy Podcast # 133 , yang selanjutnya menjelaskan bagaimana modul / drush cmd ini dapat digunakan.
PS: Tentu saja, pertama-tama lakukan backup situs Anda ...
sumber
Kunjungi / admin / build / modul itu akan membangun kembali jalur di tabel sistem. Terkadang drupal tidak dapat bootstrap lagi sehingga solusi ini tidak berfungsi dalam kasus ini. Jika tidak berhasil, Anda dapat menggunakan Drush Rebuild Project Paths seperti yang dikatakan dalam jawaban sebelumnya. Anda harus menambahkan perintah drush baru sebelum memecah bootstrap. Untuk menambahkan perintah baru, periksa bagian PERINTAH readme
sumber
Saya memiliki beberapa masalah dengan
drush dl
tidak bekerja karena masalah direktori modul. Secara umum saya suka tumpukan jawaban yang bisa saya tempelkan agar semuanya berfungsi. Di sini Anda menemukan beberapa baris yang akan menginstal Drush Rebuild Registry dan menjalankannya di situs Anda jika Anda sudah berada di direktori situs yang tepat.sumber
Saya tidak 100% yakin pada jawaban drupal-esk sejati tetapi dalam pengalaman saya:
Saya tidak sengaja memindahkan salah satu folder modul khusus saya ke folder modul khusus lainnya ketika melakukan FTP ke server. Mereka berdua masih bekerja. Drupal tampaknya telah mengenalinya sebagai modul yang terpisah meskipun berada di folder modul lain. Saya tidak perlu menonaktifkan modul.
** Modul yang saya pindahkan TIDAK memiliki file .install, jadi saya tidak yakin apakah itu penting.
sumber
Distribusi Drupal tidak menangani ini dengan baik, jadi baru-baru ini setelah secara tidak sengaja berakhir dengan salinan Entity API di
sites/all/
situs Panopoly, tidak ada yang berhasil. Registry dibangun kembali, memuat halaman modul dan semua yang lain menyebabkan kesalahan fatal.Menonaktifkan modul juga tidak mudah jika Anda harus memindahkan sesuatu seperti Entity API yang diperlukan oleh banyak modul lain di Panopoly.
Untuk mengatasi ini, untuk API Entitas Anda akan melakukan sesuatu seperti ini:
Perbarui jalur dalam tabel sistem:
Kemudian bangun kembali registri:
sumber
Drupal 7
Pertama-tama, cobalah
drush rr
.Jika tidak berhasil, setelah memindahkan file, coba perintah Drush berikut ini di direktori root Drupal Anda:
Jika di atas tidak berfungsi, cari tabel yang masih memiliki informasi lama tentang jalur dengan:
Jika tidak ada yang ditemukan, itu berarti itu adalah cache eksternal Anda.
Jika demikian, jangan lupa untuk memulai kembali, misalnya:
Lihat lebih lanjut: Metode apa yang digunakan untuk menghapus cache di Drupal?
Atau Anda dapat mencoba pertanyaan MySQL berikut setelah memindahkan file:
sumber
Direkomendasikan untuk memindahkan modul Anda ke subfolder contrib / dev / patched / custom. Namun tidak ada perolehan kinerja, ini dilakukan karena alasan praktis dan estetika. Ini akan membuat kehidupan pengembang masa depan lebih mudah.
Anda dapat memindahkan sebagian besar modul contrib ke subfolder tanpa masalah di situs langsung. Anda harus menghapus cache setelahnya. Jika Anda tidak menggunakan drush dan menemukan Anda tidak dapat mengakses halaman pembersihan cache lagi, Anda harus mengunjungi /update.php atau memotong tabel cache secara manual. Saya hanya perlu melakukan bit terakhir saat memindahkan modul API entitas.
Memindahkan modul inti secara teknis dimungkinkan, tetapi saya tidak akan merekomendasikannya atau melihat alasan yang sah untuk melakukan ini.
Pembaruan: Memindahkan modul seperti API entitas mungkin memerlukan pembangunan kembali registri. Lihat halaman registry_rebuild .
sumber
Anda bisa menambahkan tautan sym di direktori situs / semua / modul yang menunjuk ke situs / semua / contrib. Saya tidak yakin apakah itu menyelesaikan masalah Anda. Ada solusi lain juga, termasuk profil instalasi, atau file make drush. Saya tidak cukup tahu untuk memberikan rincian tentang mereka tetapi setidaknya itu adalah arah yang bisa Anda lihat.
sumber