Saya sering mendapatkan kesalahan intermiten dari modul Advanced Forum yang menyebabkan 500 kesalahan saat terjadi (WSOD). Pada produksi, ini terjadi sekitar 20 kali per jam, mungkin sekitar 2-3% dari semua memuat halaman forum per jam. Secara konsisten berselang . Secara lokal, saya tidak dapat secara konsisten mereproduksi kesalahan, tetapi itu memang terjadi.
Kesalahan aktif
Baris 232 situs / semua / modul / contrib / advanced_forum / include / core-overrides.inc`:
Panggil ke metode yang tidak ditentukan stdClass :: preview ()
Masalahnya terletak pada fungsi advanced_forum_get_topics ():
function advanced_forum_get_topics($tid, $sortby, $forum_per_page, $sort_form = TRUE) {
$term = taxonomy_term_load($tid);
drupal_add_feed('taxonomy/term/' . $tid . '/feed', 'RSS - ' . check_plain($term->name));
// Views handles this page
$view = views_get_view('advanced_forum_topic_list');
$view->sort_form = $sort_form;
return $view->preview('default', array($tid));
}
Pada dasarnya views_get_view () gagal menemukan tampilan dan objek tidak dibuat seperti yang diharapkan pada baris kembali. Jadi masalahnya tampaknya terletak pada Views yang terkadang tidak mengetahui tampilan yang ada. Ini membuat saya berpikir itu masalah kail.
Di mana mulai menjadi aneh adalah implementasi hook_views_default_views () dan hook_views_plugins (). Menurut views.api.php hook_views_default_views () harus dalam file bernama MODULENAME.views_default.inc dan hook_views_plugins () harus dalam file bernama MODULENAME.views.inc. Namun, kedua file tersebut dalam file MODULENAME.views.inc.
Dari views.api.php:
hook_views_plugins()
Pengait ini harus ditempatkan di MODULENAME.views.inc dan akan dimuat secara otomatis.
MODULENAME.views.inc harus ada di direktori yang ditentukan oleh kunci 'path' yang dikembalikan oleh MODULENAME_views_api (), atau direktori yang sama dengan file .module, jika 'path' tidak ditentukan.hook_views_default_views()
Pengait ini harus ditempatkan di MODULENAME.views_default.inc dan akan dimuat secara otomatis. MODULENAME.views_default.inc harus berada di direktori yang ditentukan oleh kunci 'path' yang dikembalikan oleh MODULENAME_views_api (), atau direktori yang sama dengan file .module, jika 'path' tidak ditentukan.
Saya mencoba membagi rutinitas ini ke dalam file yang tampaknya benar. Hal ini menyebabkan Tampilan secara konsisten menemukan tampilan Forum Tingkat Lanjut (seperti yang ditunjukkan bahwa itu muncul dalam daftar Tampilan GUI) tetapi tidak melihat plug-in. Halaman-halaman di Advanced Forum berjalan dengan baik, tetapi pandangan itu kosong karena mereka mereferensikan sebuah plugin gaya yang disediakan oleh Advanced Forum yang Views tidak lagi terlihat.
Saya berasumsi saya kehilangan sesuatu tentang kait Pandangan, tapi saya benar-benar bingung.
- Stack: Drupal 7, Views (7.x-3.3), CTools (7.x-1.0), Forum Tingkat Lanjut (7.x-2.0)
- PHP FPM, APC, nginx, Redis
- Saya tidak menemukan sesuatu yang membantu dalam masalah ini
UPDATE 1 : Walaupun saya belum memecahkan akar penyebabnya, tampaknya menonaktifkan Redis dan kembali ke mekanisme penyimpanan cache berbasis database Drupal yang standar menghentikan masalah yang terjadi.
PEMBARUAN 2 : Saya dapat dengan andal mereplikasi masalah di lokal dengan melakukan flushall
di Redis. Pemuatan halaman pertama dari melihat daftar forum akan berakibat fatal. Pemuatan halaman kedua (dan semua yang berikutnya) berfungsi dengan baik . PEMBARUAN: Saya harus membuka halaman daftar admin Tampilan untuk menghapus kesalahan.
UPDATE 3 : Pada pemecahan masalah lebih lanjut masalah ini tampaknya disebabkan oleh cache Views tidak dibangun kembali dengan benar setelah cache bersih, hanya ketika menggunakan Redis. Masalah tidak terjadi ketika kembali ke cache Drupal standar. Ketika masalah terjadi hanya 2-4 entri cache yang ada untuk Tampilan, yang bertentangan 100+ ketika cache dibangun dengan benar. Mengunjungi halaman daftar tampilan admin menyebabkan cache sepenuhnya dibangun dan masalah tidak terjadi. Saya perlu memverifikasi apakah memukul halaman tampilan tampilan yang menyebabkan masalah, atau hanya tampilan forum lanjutan.
UPDATE 4 : Pengguna yang membantu di IRC telah menyarankan ini mungkin menjadi masalah yang terkait dengan masalah kondisi perlombaan Views cache: 853864 , 1102252
Jawaban:
Sepertinya Anda menemukan jawaban yang tepat dari IRC. "Secara konsisten terputus-putus" dalam pengalaman saya adalah ketika ada dua sumber yang mengisi cache. Paling umum adalah ketika Anda memiliki situs pengembangan dan situs pementasan / produksi pada basis kode yang berbeda tetapi database yang sama. Cache yang disediakan oleh drupal yang telah saya baca kode untuk terhubung ke database, sehingga informasi routing / fungsi yang di-cache akan saling mencemari. Menekan halaman admin / modul akan menyegarkan cache modul dan lokasi, menekan halaman daftar admin / views menghapus kesalahan Anda karena menyegarkan pemahaman situs tentang pandangan dari perspektif situs Anda, bukan dari perspektif apa pun yang bertentangan dengan Anda.
Jika Anda memiliki kemampuan admin server, ubah kata sandi ke basis data situs dan kata sandi di settings.php Anda, dan lihat apa yang memecahnya. Cantuman Anda harus berhenti rusak dan apa yang merusaknya harus dihancurkan ... kecuali jika terhubung langsung ke situs Anda dan menggunakan file settings.php Anda.
Juga, periksa untuk memastikan tidak ada beberapa instalasi modul tampilan di dokumen Anda.
sumber