آپدیت دستی افزونه وردپرس با زیپ: نسخه قبلی کجا می‌ماند؟

حلقه زرد بزرگی شبیه عدد صفر روی زمینه تیره که داخلش یک پوشه خط‌چین خالی با نام updraftplus دیده می‌شود، کنار عنوان «نسخه قبلی کجا می‌ماند؟» و نوشته «بعد از آپلود، نسخه قبلی پاک می‌شود»
محصولات زیر برای شماست...
جدیدترین مقالات
دسترسی سریع
فهرست محتوا

روز ۲۵ مهر ۱۴۰۵ روی یک وردپرس ۷٫۱٫۲ فارسی، UpdraftPlus Premium را با زیپ‌های خود فروشگاه از نگارش 2.26.8.26 (زیپی که ۱۵ مهر گرفته بودیم) به 2.26.10.26 رساندیم. وردپرس نوشت «افزونه با موفقیت به‌روز شد.» و نسخه قبلی را همان لحظه پاک کرد: پوشه upgrade-temp-backup، که وردپرس برای نگه‌داشتن نسخه‌های موقت می‌سازد، در این اجرا اصلاً ساخته نشد.

این نوشته آپدیت دستی افزونه وردپرس را با همان آزمایش مرحله‌به‌مرحله می‌آورد: چه چیزی برمی‌گردد و چه چیزی نه، تیک بکاپ خودکار روی آپلود اجرا می‌شود یا نه، دکمه «هم‌اکنون به‌روز نمایید» روی افزونه فروشگاه چه چیزی نصب می‌کند، و اگر سایت 500 شد از کجا شروع کنید. اگر فقط ترتیب کار را می‌خواهید، بخش آخر است. بین آزمایش‌ها سایت را به نسخه‌ای ذخیره‌شده برمی‌گرداندیم.

آپلود زیپ نسخه قبلی را پاک می‌کند و کپی‌ای نمی‌گذارد

از «افزونه‌ها > افزودن افزونه» زیپ را انتخاب و «هم‌اکنون نصب نمایید» را بزنید. اگر پوشه‌ای با همین نام هست، وردپرس نصب را کنار می‌گذارد و صفحه مقایسه نشان می‌دهد؛ این صفحه از وردپرس ۵٫۵ هست (یادداشت توسعه‌دهندگان). جدول نام، نگارش، نویسنده و نگارش لازم وردپرس و PHP را برای نسخه فعلی و بارگذاری‌شده می‌آورد. این افزونه هیچ‌کدام از دو نگارش لازم را اعلام نکرده بود و هر دو ردیف «-» بود.

صفحه مقایسه وردپرس هنگام آپلود زیپ Updraftplus: نگارش فعلی 2.26.8.26 و بارگذاری‌شده 2.26.10.26، ردیف‌های نگارش لازم وردپرس و Php خالی، و دکمه‌های جایگزینی و لغو

زیر جدول وردپرس می‌گوید ابتدا از پایگاه‌داده و پرونده‌ها بکاپ بگیرید. با «بارگذاری شده را جایگزین فعلی نمایید» پوشه قبلی پاک و پوشه تازه کپی می‌شود. بعد از آن وردپرس هیچ نسخه‌ای از افزونه قبلی نگه نداشت: پوشه upgrade-temp-backup در آن اجرا ساخته نشد، و روی سایتی که قبلاً یک آپدیت از صفحه «به‌روزرسانی‌ها» داشت، پوشه بود ولی بعد از آپلود خالی ماند. بازه بکاپ‌گیری و تعداد بکاپ‌های نگه‌داری‌شده‌ای که در افزونه گذاشته بودیم سر جایشان بود.

علتش در کد وردپرس ۷٫۱٫۲ دیده می‌شود (مقایسه دو برچسب ۷٫۱٫۲ و ۷٫۱٫۳ در گیت‌هاب نشان می‌دهد فایل‌های نصب‌کننده، آپدیت خودکار و حالت بازیابی در ۷٫۱٫۳ تغییر نکرده‌اند). مسیر صفحه «به‌روزرسانی‌ها» کلید temp_backup را می‌فرستد و وردپرس نسخه قبلی را در آن پوشه نگه می‌دارد؛ تابع نصبی که آپلود صدا می‌زند (install) آن را نمی‌فرستد. در آزمایشی با Akismet (از 5.5 به 5.7.2) دیدیم که حتی در مسیر «به‌روزرسانی‌ها» نسخه قبلی فقط تا پایان کار آنجاست. بازگرداندن خودکار بعد از خطای مرگبار هم فقط در کد آپدیت خودکار هست، و آپلود از آن رد نمی‌شود. افزونه رایگان WP Rollback هم، که نت‌افراز برای برگشتن پیشنهاد می‌کند، طبق متن خودش فقط افزونه‌های مخزن وردپرس را برمی‌گرداند.

تیک بکاپ خودکار روی آپلود اجرا نمی‌شود

UpdraftPlus Premium روی صفحه «به‌روزرسانی‌ها» کادری دارد با عنوان Be safe with an automatic backup و تیکی برای بکاپ پیش از کار. وقتی تیک را زدیم و Akismet را از 5.5 به 5.7.2 رساندیم، قبل از کار دو پرونده بکاپ ساخته شد، یکی از پایگاه‌داده و یکی از پوشه افزونه‌ها، با نگارش‌های پیش از کار (Akismet 5.5 و UpdraftPlus 2.26.8.26).

بعد تیک را روشن گذاشتیم (افزونه انتخاب را به‌خاطر می‌سپارد) و دو بار زیپ آپلود کردیم: یک بار همین افزونه از 2.26.8.26 به 2.26.10.26 و یک بار Akismet از 5.5 به 5.7.2. هیچ بکاپ تازه‌ای ساخته نشد. در کد این تیک (autobackup.php) به مسیرهای آپدیت افزونه، قالب، هسته و آپدیت خودکار وصل است؛ در هیچ‌جای افزونه اتصالی به صفحه آپلود پیدا نکردیم. پس قبل از هر آپلود خودتان از پایگاه‌داده و پرونده‌ها بکاپ بگیرید؛ راهش در نوشته بکاپ با UpdraftPlus هست.

دکمه «هم‌اکنون به‌روز نمایید» روی UpdraftPlus همان زیپ فروشگاه را نصب نکرد

صفحه افزونه‌ها زیر UpdraftPlus نوشت نگارش 2.26.11.0 در دسترس است (تصویر زیر، روی سایتی که هنوز 2.26.8.26 داشت)؛ همین پیام بعد از رسیدن افزونه به 2.26.10.26 هم ماند. زیپ فروشگاه آن روز 2.26.10.26 بود؛ صفحه محصول آخرین بار ۲۴ مهر ویرایش شده بود.

ردیف Updraftplus در صفحه افزونه‌ها با نگارش 2.26.8.26 و پیامی که می‌گوید نگارش تازه‌ای در دسترس است و پیوند جزئیات نگارش 2.26.11.0 و پیوند به‌روز کردن را دارد

این پیام را خود افزونه می‌دهد و آدرس دانلودش در teamupdraft.com بود، نه در فروشگاه. قوانین فروشگاه برای زمان رسیدن نسخه تازه تعهدی نمی‌دهد و می‌گوید آپدیت می‌تواند از ۱ تا ۱۴ روز طول بکشد.

ما روی نگارش 2.26.8.26 دکمه را یک بار زدیم، با تیک بکاپ خاموش. صفحه نوشت «افزونه با موفقیت به‌روز شد.» و 2.26.11.0 نصب شد، اما با فایل‌های دیگری. پوشه addons، که در هر دو زیپ فروشگاه ۲۵ پرونده دارد، در آن نبود؛ تیک بکاپ از صفحه «به‌روزرسانی‌ها» رفت و کادری جایش آمد که همان قابلیت را معرفی می‌کند.

یعنی نسخه‌ای نصب شد که قابلیتی از زیپ فروشگاه را نداشت. بازه بکاپ‌گیری سر جایش ماند. علت این تفاوت را بررسی نکردیم.

برگشتن آسان بود: زیپ فروشگاه (2.26.10.26) را آپلود کردیم. صفحه مقایسه نگارش را قرمز و با هشدار «نگارش قدیمی» نشان داد، و بعد از جایگزینی addons دوباره ۲۵ پرونده داشت و بکاپ خودکار برگشت. برای افزونه‌ای که از فروشگاه گرفته‌اید، نگارش را از صفحه محصول بخوانید و با زیپ همان صفحه کار کنید. این را فقط با UpdraftPlus Premium آزمودیم.

بازگرداندن فایل‌ها پایگاه‌داده را برنمی‌گرداند

در آزمایش ما UpdraftPlus پایگاه‌داده را تقریباً دست نزد: بعد از دو بار باز کردن یک صفحه مدیریت، نام هیچ گزینه‌ای و هیچ جدولی عوض نشد و ستون‌های جدول‌ها همان ماند؛ فقط سه مقدار فرق داشت (شماره نگارش، برنامه کرون و زمان ثبت‌شده برای راه‌اندازی اولیه). پس در آزمایش ما برای UpdraftPlus برگرداندن فایل‌ها کافی بود: افزونه با نگارش قبلی فعال شد.

ووکامرس این‌طور نبود. فایل‌هایش را از 11.1.2 به 11.2.1 بردیم و دوباره به 11.1.2 برگرداندیم (با WP-CLI). نسخه‌های قدیمی ووکامرس در مخزن وردپرس هست و نصب 11.1.2 از آن جواب داد.

مرحلهجدول‌هانگارش فایل‌هانگارش پایگاه‌داده در ووکامرس
11.1.2 نصب‌شده۵۱11.1.211.1.2
فایل‌های 11.2.1۵۳11.2.111.1.2
فایل‌ها دوباره 11.1.2۵۳11.1.211.2.1

نسخه تازه دو جدول و دست‌کم یک گزینه اضافه کرد و ستون‌های دو جدول دیگر را عوض کرد. با برگرداندن فایل‌ها همه ماندند، و صفحه وضعیت ووکامرس فایل‌ها را 11.1.2 و پایگاه‌داده را 11.2.1 نشان داد. پیشخوان باز می‌شد؛ بیشتر از این را آزمایش نکردیم. پس بکاپ قبل از آپلود باید پایگاه‌داده را هم داشته باشد؛ راهنمای بکاپ وردپرس هم هر دو را با هم می‌خواهد.

افزونه خراب یعنی 500 در صفحه اصلی و پیشخوان، و هیچ‌چیز خودکار برنمی‌گردد

برای دیدن بدترین حالت، از زیپ 2.26.10.26 یک نسخه دست‌کاری‌شده ساختیم: یک خط بعد از بررسی ABSPATH اضافه کردیم که تابعی را صدا می‌زند که وجود ندارد. این زیپ ساخته ما برای آزمایش است، نه زیپ فروشگاه. آپلود و جایگزینی کردیم و صفحه نوشت به‌روز شد. بعد از آن صفحه اصلی، wp-login.php، صفحه افزونه‌ها و صفحه افزودن افزونه هر چهار کد 500 دادند و صفحه اصلی «یک خطای مهم در این وب سایت رخ داده است.» را نشان داد. چیزی نسخه قبلی را برنگرداند.

راه‌های برگشت را در نوشته خطای 500 وردپرس آزموده‌ایم: ایمیل وردپرس (در آزمایش ما با باز شدن صفحه ورود آمد و با باز شدن صفحه اصلی نیامد، و حد پیش‌فرض وردپرس روزی یک ایمیل است)، حالت بازیابی، و تغییر نام پوشه افزونه. اینجا دو چیز اضافه دیدیم.

حالت بازیابی افزونه خراب را برای همان نشست متوقف می‌کند، برای همین صفحه افزودن افزونه در آن باز می‌شود و می‌شود زیپ 2.26.8.26 را آپلود کرد. صفحه مقایسه نسخه خراب را «فعلی» می‌خواند و زیپ قبلی را نگارش قدیمی می‌داند، و بعد از جایگزینی و «خروج از حالت بازیابی» افزونه با نسخه قبلی فعال شد و بازه بکاپ‌گیری سر جایش بود.

با تغییر نام پوشه، سه ثانیه بعد صفحه اصلی، ورود و صفحه افزونه‌ها 200 دادند. وردپرس افزونه را از فهرست فعال‌ها برداشت و پوشه تغییر نام‌یافته در فهرست افزونه‌ها غیرفعال و با همان نام و همان نگارش خراب دیده می‌شد؛ فعال کردنش را وردپرس رد کرد. زیپ 2.26.8.26 نصب ساده بود، بدون صفحه مقایسه؛ بعد از «فعال‌کردن افزونه» افزونه با بازه بکاپ‌گیری و تعداد بکاپ‌های نگه‌داری‌شده‌اش برگشت. پوشه تغییر نام‌یافته را بعد از آن پاک کنید. اگر به پوشه‌های هاست دسترسی ندارید، درخواست رفع خطای سایت را ثبت کنید یا صفحه پشتیبانی فنی وردپرس را ببینید.

روی افزونه غیرفعال، 500 به یک پیام تبدیل شد

همان زیپ خراب را این بار روی افزونه غیرفعال جایگزین کردیم. وقتی «فعال‌سازی» را زدیم، وردپرس رد کرد («به‌دلیل داشتن مشکلی جدی افزونه فعال نشد.»)؛ صفحه اصلی و ورود 200 ماندند و افزونه غیرفعال ماند. همین جایگزینی روی افزونه فعال، سایت را 500 کرده بود.

این را فقط با UpdraftPlus و فقط با خطایی آزمودیم که همان لحظه اجرای فایل افزونه رخ می‌دهد؛ در نوشته خطای 500 دیدیم افزونه‌ای که تابع ناموجود را داخل هوک init صدا می‌زند فعال می‌شود و بعد سایت 500 می‌دهد. تا وقتی افزونه غیرفعال است، کارش هم خاموش است؛ برای درگاه پرداخت یا افزونه‌ای که مشتری هر لحظه به آن نیاز دارد، مدتی که غیرفعال است باید کوتاه باشد.

از سه عیب زیپ که امتحان کردیم، فقط پوشه بالایی غلط بی‌صدا نصب شد

سه نمونه از زیپ فروشگاه ساختیم، هر کدام با یک عیب، و از همان صفحه آپلود کردیم.

عیب زیپوردپرس چه کرد
پوشه بالایی updraftplus-2.26.10.26 به‌جای updraftplusصفحه مقایسه نیامد، «افزونه با موفقیت نصب شد» و افزونه دوم غیرفعال و با نگارش تازه در فهرست نشست؛ فعال کردنش رد شد و نسخه قدیمی همچنان اجرا می‌شد
Requires PHP: 9.9 در سرصفحه افزونه (نسخه ویرایش‌شده)پیش از صفحه مقایسه نصب را رد کرد و PHP سرور (۸٫۳٫۳۵) و نگارش لازم (۹٫۹) را در پیام آورد؛ چیزی عوض نشد
زیپ داخل زیپ، در یک پوشه راهنماپیام وردپرس این بود که افزونه معتبری در بسته پیدا نشد؛ چیزی عوض نشد

پوشه بالایی غلط از دو عیب دیگر بدتر است چون خطا نمی‌دهد: فهرست افزونه‌ها ردیفی با نگارش 2.26.10.26 دارد و سایت هنوز با کد قبلی کار می‌کند. پوشه بالایی زیپ را قبل از آپلود، با باز کردنش، ببینید.

هفت قدمی که آپدیت دستی افزونه را برگشت‌پذیر می‌کنند

  1. نگارش را از صفحه محصول فروشگاه بخوانید و زیپ را از همان‌جا بگیرید. اگر پیام خود افزونه نگارش بالاتری می‌گوید، زیپ فروشگاه همان نیست.
  2. از پایگاه‌داده و پرونده‌ها بکاپ بگیرید. تیک بکاپ خودکار UpdraftPlus روی آپلود اجرا نشد.
  3. زیپ نسخه فعلی را نگه دارید؛ وردپرس بعد از جایگزینی نسخه قبلی را نگه نمی‌دارد. اگر ندارید، فایل بکاپ پوشه افزونه‌ها (در آزمایش ما نامش به -plugins.zip ختم می‌شد) پوشه UpdraftPlus 2.26.8.26 را، که پیش از کار بود، داشت؛ پوشه افزونه را از آن بیرون بیاورید.
  4. زیپ تازه را باز کنید: باید یک پوشه بالایی به نام همان پوشه قبلی و فایل اصلی افزونه در آن باشد.
  5. افزونه را غیرفعال کنید، زیپ را آپلود و جایگزین کنید، و بعد فعال‌سازی را بزنید. اگر وردپرس فعال‌سازی را رد کرد، سایت بالاست؛ زیپ قبلی را آپلود کنید.
  6. صفحه اصلی، یک صفحه داخلی و پیشخوان را باز کنید.
  7. اگر 500 شد، از حالت بازیابی یا تغییر نام پوشه شروع کنید، زیپ قبلی را بگذارید و اگر افزونه پایگاه‌داده را عوض کرده بود، بکاپ را بازیابی کنید.

پرسش‌های متداول

آپدیت دستی افزونه با آپلود زیپ تنظیمات را پاک می‌کند؟

در آزمایش ما با UpdraftPlus نه: بعد از جایگزینی، بازه بکاپ‌گیری و تعداد بکاپ‌های نگه‌داری‌شده سر جایشان بودند، چون در پایگاه‌داده می‌مانند و جایگزینی فقط پوشه افزونه را عوض می‌کند. افزونه‌ای که هنگام آپدیت جدول یا گزینه می‌نویسد، مثل ووکامرس در همان آزمایش، پایگاه‌داده را هم عوض می‌کند.

آیا وردپرس بعد از جایگزینی افزونه با زیپ، کپی نسخه قبلی را نگه می‌دارد؟

نه. در آزمایش ما بعد از جایگزینی هیچ نسخه‌ای از افزونه قبلی نبود، و پوشه upgrade-temp-backup ساخته نشد، یا روی سایتی که قبلاً از صفحه به‌روزرسانی‌ها آپدیت شده بود خالی ماند. زیپ نسخه فعلی را خودتان نگه دارید.

اگر بعد از آپدیت افزونه سایت 500 شد چه کنم؟

از حالت بازیابی (پیوند ایمیل وردپرس، که در آزمایش ما با باز شدن صفحه ورود آمد) یا تغییر نام پوشه افزونه در wp-content/plugins شروع کنید و بعد زیپ قبلی را آپلود کنید. در آزمایش ما سه ثانیه بعد از تغییر نام پوشه، سایت دوباره باز شد (200). اگر افزونه پایگاه‌داده را عوض کرده بود، بکاپ را هم بازیابی کنید.

چطور به نسخه قبلی افزونه برگردم؟

زیپ نسخه قبلی را از همان صفحه آپلود کنید. وردپرس آن را «نگارش قدیمی» می‌خواند و باز هم جایگزینی را می‌پذیرد. فقط فایل‌ها برمی‌گردند؛ در آزمایش ما با ووکامرس، جدول‌ها و گزینه‌هایی که نسخه تازه نوشته بود ماندند.

دکمه «هم‌اکنون به‌روز نمایید» برای افزونه‌ای که از فروشگاه گرفته‌ام چه می‌کند؟

روی UpdraftPlus Premium، آن دکمه نگارش 2.26.11.0 را از آدرس سازنده نصب کرد، نه زیپ فروشگاه را، و پوشه addons با ۲۵ پرونده در آن نبود. با زیپ فروشگاه برگشتیم. افزونه‌های دیگر را آزمایش نکردیم.

پیش از آپدیت دستی باید افزونه را غیرفعال کنم؟

برای خطایی که هنگام اجرای فایل افزونه رخ دهد، بله: در آزمایش ما با UpdraftPlus، زیپ خراب روی افزونه غیرفعال نصب شد و وردپرس فعال‌سازی را رد کرد و سایت باز ماند؛ همان زیپ روی افزونه فعال سایت را 500 کرد. افزونه تا وقتی غیرفعال است کار نمی‌کند.

تصویر سمانه جعفری
سمانه جعفری
پیشنهاد میکنیم این مقالات را هم بخوانید

دیدگاه یا پرسش خود را بنویسید