سلام در ادامه نظرم رو عرض میکنم ولی توجه داشته باشید که این تجربهٔ بنده هست و میتونه Best Practice نباشه!
عرضم به حضور شما که من سه تجربهٔ زیر رو در این راستا دارم:
- تبدیل سایت جوملا به سیاماس اختصاصی
- تبدیل سایت وردپرس به پروژهٔ پیاچپی معمولی
- تبدیل سیاماس شخصی پیاچپی به یک سیاماس شخصی دیگه
اما ظاهراً آنچه مد نظر شماست دقیقاً عکس این قضیه هست. یعنی یک سایت معمولی با PHP کد زدهاید حالا به دلایلی قصد داریم پورتش بکنید روی WordPress. در ادامه به تفکیک تجربیات و چالشها رو عرض میکنم و امیدوارم که بتونید از داخلش سولوشن (راهکار) مناسب خود رو بیرون بکشید.
- تبدیل سایت جوملا به سیاماس اختصاصی
خب در این پروژه به این نتیجه رسیدیم که بهتره از جوملا دیگه استفاده نکنیم؛ لذا تصمیم بر این شد که مهاجرت کنیم به سیاماس خودمون. سیاماس اختصاصی ما تقریباً چیزهایی که نیاز داشتیم رو داشت اما بزرگترین چالش ما، تفاوت در اسکمای دیتابیس جوملا با سیاماس جدید بود. اینجا ما دو راهپیش رو داشتیم:
- یا اسکمای دیتابیس قدیمی رو آپدیت کنیم تا با مدلهای سیاماس جدید همخوانی داشته بشن و
- یا برعکس؛ به عبارت دیگر، کدهای داخل مدلهای سیاماس جدید رو ریفکتور کنیم تا هیچ دستی به دیتابیس جوملا نزنیم و همه چیز حاضر و آماده قابل استفاده باشه
که این راهکار دوم رو انتخاب کردیم. خب در این بین، یکسری ستونهای جداول بود که اضافی بودن که همه رو حذف کردیم.
- تبدیل سایت وردپرس به پروژهٔ پیاچپی معمولی
یک وبلاگ بود با وردپرس که باید مییامد روی پروژهٔ دیگری که در این پروژه دقیقاً عکس پروژهٔ قبلی عمل کردیم؛ یعنی اسکمای دیتابیس وردپرس رو تغییر دادیم تا با مدلهای سیاماس خومون به اصلاح مَچ بشه. برای اینکه URL ها به باد نرن هم سعی کردیم که تا حد ممکن همون ساختار وردپرس رو در Routing پروژهٔ جدید حفظ کنیم.
- تبدیل سیاماس شخصی پیاچپی به یک سیاماس شخصی دیگه
در این پروژه هم که کمی تجربهمون بالاتر رفته بود، سیاماس خود رو آپدیت کردیم و این در حالی بود که سایتی که قبلا باهاش بالا میآید دیگه سازگار نبود و مجبور بودیم کلی تغییرات بدیم. من رو این مورد آخر بیشتر توضیح میدم چون حدس میزنم که پاسخ برخی سؤالات شما داخل این بخش بگنجه.
فرض کنیم که در سیاماس قبلی چندین تیبل مجزا داشتیم که دیتای مختلفی توی اونها ذخیره میشد که به نوعی با هم مرتبط بودن اما در اسکمای دیتابیس جدید کلیهٔ این جداول ادغام شده و تجمیع شده بودن که اینجای کار کمی چالشی بود. در واقع، یک هلپر (فانکشن) نوشتم که میرفت دادههای اون جداول رو میگرفت، چیزهای اضافی رو حذف میکرد، چیزهای جدید رو بهش اضافه میکرد و در نهایت در جدول جدید Insert میکرد که به نظر میرسه شما هم باید چنین کاری بکنید برای مهاجرت از پروژه معمولی به وردپرس.
در ضمن، در پروژهٔ جدید بحث URL ها به میون میآمد که ممکن بود خیلیهاشون 404 بشن که برای این منظور هم چند کار کردیم:
- یکسری یوآرالها رو بیخیال شدیم و گفتیم که اشکالی نداره و زحمت رو انداختیم به عهدهٔ گوگل تا رباتهاش دوباره بیان و سایت رو کرول کنن و دیتای گوگل آپدیت بشه (که این رو خیلی توصیه نمیکنم چون حتی ممکنه گوگل برای این سهلانگاری جریمه بکنه شما رو ولی خب برای من مهم نبود که جریمه بشم یا نشم!)
- یکسری فانکشن نوشتم که به محض اینکه کاربر وارد یوآرالهای قدیمی میشد، میفهمید که مسیر جدید اون کانتنت کجاست و ریدایرکتش میکرد به مسیر جدید که این خوب بود ولی کمی هزینهٔ زمانی داره. یعنی باید پی این رو به تن بمالید که چند دهم ثانیه کاربر معطل میشه تا هدایت بشه به صفحه جدید.
- یک راهکار دیگه هم تعریف rule در فایل htaccess بود که این هم راهکار خوبی هست.
در یک کلام، بزرگترین یا یکی از بزرگترین چالشهای شما درج دیتای قدیمی در تیبلهای جدید هست. برای این منظور، مثلاً اگر جدولی دارید که یکصد هزار رکورد توش ثبت شده، سعی نکنید تا یهو همهٔ اون صد هزار تا رکورد رو بزنید توی جدول جدید چون ممکنه که اون وسط هزار و یک اتفاق بیوفته و سیستم متوقف بشه و تازه داستان شروع میشه که آقا تا کجا آپدیت شد تا کجا نشد و ... لذا به نظرم بگذارید که مثلا هزار تا هزار تا یا حتی کمتر صد تا صد تا رکوردها رو منتقل کنید و حتما لاگ بگیرید جایی که آیا مثلا صد تای اول موفقیت آمیز بود یا نه همچنین در مورد ترنزیشن در مای اس کیو ال هم مطالعه کنید.
به طور خلاصه، ترنزیشن میگه اگر یک عملیات دیتابیسی شروع شد اما قبل از اینکه کامل بشه جایی از کار به مشکل خورد، کل تغییرات رو به حالت اول برمیگردونه که این تضمین میکنه تا سردرگم کمتر بشید. قبل از شروع کار هم حتمای چند تا بکاپ بگیرید تا داشته باشید. همچنین به خاطر داشته باشید که collision جداول دیتابیس قدیمی و جدید با هم کانفلیکت نداشته باشن. مثلا اگر در قدیمیه general هست، در جدیده هم همون باشه
امیدوارم کمکی کرده باشم
ارادت
پاسخ ها