خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SHOW FULL COLUMNS FROM `wp_options`

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format', 'hashtags') AND tr.object_id IN (2980) ORDER BY t.name ASC

نصب وردپرس فارسی با Composer و ‌Bedrock - Hive | مجله توسعه‌دهندگان وب
  • شاخه: دسته‌بندی نشده    ::    بازدید: ۵۳۶
  • ۰

نصب وردپرس فارسی با Composer و ‌Bedrock

بعد از کار کردن به مدت چند سال با ابزار مدیریت وابستگی‌های کامپوزر، استفاده از وردپرس مانند آن است که به سال‌های قبل از ۲۰۱۰ بازگشته‌اید! فرض کنید، کتابخانه‌ای برای ارسال پیامک نوشته‌اید و در آن از کتابخانه‌های دیگری مثل guzzle استفاده کرده‌اید، حال به دلیلی نیاز دارید از آن در وردپرس نیز استفاده کنید، مشکل اینجا آغاز می‌شود! حال باید تمام فایل‌های کتابخانه‌ی خود و وابستگی‌های آن را جداگانه دانلود کنید و در پروژه وردپرس خود قرار دهید، از گفتن مشکلات بروزرسانی وابستگی‌ها و لود خودکار فایل‌ها به دلیل طولانی شدن مطلب می‌گذرم!

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

 

‌Bedrock چیست؟

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

مقایسه ساختار فایل Bedrock و وردپرس

اما این تمام داستان نیست! در Bedrock شما می‌توانید چند نوع تنظیمات و متغیرهای مختلف برای شرایط و محیط‌های متغیر داشته باشید. به عنوان مثال تنظیمات پیکربندی MySQL کامپیوتر شما با سروری که می‌خواهید آن را اجرا کنید، احتمالا متفاوت است! همچنین Bedrock با تغییر ساختار فایل‌ها و عدم دسترسی به فایل‌های اصلی و استفاده از پلاگین wp-password-bcrypt به امنیت وبسایت وردپرسی شما نیز اضافه کرده است. همچنین با استفاده از WordPress Packagist (همانند وبسایت Packagist.org) می‌توانید از طریق کامپوزر پلاگین‌ها و قالب‌های وردپرس را نیز نصب کنید.

برای اطلاعات بیشتر از امکانات ‌Bedrock می توانید این لینک را مطالعه کنید.

نصب و پیکربندی Bedrock

نصب ‌Bedrock کاملا ساده است. کافی است ابتدا آن را با کامپوزر دانلود کنید:

سپس فولدر my-bedrock-site را باز کنید. فایل .env.example را کپی کرده و با نام .env (نقطه یا dot در ابتدای آن است) ذخیره کنید. سپس آن را با ادیتور خود باز کنید:

  • DB_NAME: نام دیتابیس
  • DB_USER: نام کاربری دیتابیس
  • DB_PASS: پسورد کاربر دیتابیس
  • DB_HOST: آدرس دیتابیس
  • WP_ENV: محیطی (environment) که وردپرس قرار است در آن کار کند. (مقادیر staging, production, development)
  • WP_HOME: آدرس (URL) کامل صفحه اصلی سایت وردپرسی شما
  • WP_SITEURL: آدرس (URL) کامل وردپرس به همراه دایرکتوری زیرمجموعه آن (مثلا: http://example.com/wp) – در بیشتر موارد مقدار پیشفرض نیاز به تغییر ندارد، چون بر اساس  WP_HOME محاسبه می‌شود.

همچنین برای تنظیم کلیدهای امنیتی مثل AUTH_KEY می‌توانید از یکی از دو راه زیر استفاده کنید:

  1. به این لینک رفته و مقادیری که به صورت تصادفی تولید شده است را کپی کنید.
  2. از طریق ابزار تحت کامند wp-cli:

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

وردپرس فارسی!

برای اینکار ابتدا از پکیج‌های wp-languages که توسط koodimonni ساخته شده است و هر ۳۰ دقیقه بروز می گردند، استفاده می کنیم. اگر حوصله مراحل گفته شده زیر را ندارید (!)، فایل composer.json را از این لینک دانلود کرده و جایگزین قبلی کنید و سپس با دستور زیر آن‌ها را نصب کنید:

در غیر این صورت، فایل composer.json را باز کرده و repository آن را به بخش repositories اضافه کنید:

سپس در قسمت extra این را نیز اضافه کنید:

و اما مرحله آخر نصب پلاگین wp-jalali (برای تاریخ شمسی و …) که در وبسایت wordpress packagist می‌توانید آن پیدا کنید:

wp-jalali-wpackagist

و نصب فایل‌های زبان، که هر دوی آن‌ها با دستور زیر نصب می‌شوند:

و در آخر به وردپرس فارسی خوش آمدید!

welcome-to-wordpress copy

 

Deploy یا استقرار آن در سرور

‌Bedrock and Trellis

سوال بعدی احتمالا این خواهد بود که چگونه آن را در سرور یا هاست اشتراکی خود قرار دهم.

برای اینکار سازنده bedrock ابزاری با نام Trellis را نیز ساخته است، که می‌توانید با آن علاوه بر سرور production در محیط development نیز از طریق Vagrant در یک محیط مشابه (چیزی که سازندگان آن خیلی بر آن تاکید دارند) استفاده کنید. در محیط production نیز با استفاده از Ansible، ابزارهای مورد نیاز مانند Nginx، MariaDB و … را با استفاده از یک دستور فرمان برای شما نصب می کند. البته لازمه‌ی آن این است که سرور شما از قبل چیزی بر روی آن نصب نشده باشد!

حال اگر سرور شخصی داشته باشید که از قبل برنامه‌های مورد نیاز بر روی آن نصب شده باشد، می‌توانید از ابزارهای دیگر مانند deployer، capistrano یا phploy استفاده کنید. برای capistrano، سازندگان bedrock، تنظیمات آن را در این repository گیت‌هاب قرار داده‌اند، که می‌توانید به راحتی از آن استفاده کنید.

اما برای هاستینگ‌های اشتراکی، محدودیت‌ها سبب می‌شود که نتوانید از این ابزارها استفاده کنید و احتمالا باید با همان روش‌های قدیمی و طاقت‌فرسای آپلود کردن فایل زیپ و اکسترکت آن ادامه دهید! اما مشکلی که در خیلی از هاستینگ اشتراکی وجود دارد این است که احتمالا نمی‌توانید document root را تغییر دهید و بر روی فولدر web تنظیم کنید و حتما باید public_html باشد. برای اینکار فایل application.php را از مسیر زیر باز کرده:

و سپس مقدار:

را به:

تغییر دهید.

در آخر فولدر web را نیز به public_html تغییر دهید.

 

نتیجه‌گیری

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

سایت roots.io، سازنده bedrock، پلاگین‌های دیگری از جمله stage switcher برای تغییر محیط‌ها (Environments) و ابزار خوب دیگری به نام Sage که یک starter theme برای ساخت قالب‌های وردپرس با ابزارهای مدرن مثل gulp، browser-sync و … است، را نیز ساخته است. بد نیست نگاهی نیز به آنها بیاندازید 🙂

اگر تجربه‌ای از این ابزار یا ابزارهای مشابه داشته‌اید و یا سوالی ذهن شما را مشغول کرده است،‌ خوشحال می‌شوم در بخش نظرات مطرح کنید.

علی برهانی

توسعه‌دهنده‌ای به‌ دنبال سادگی!

همچنین ممکن است دوست داشته باشید ...

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (2635) ORDER BY t.name ASC

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (2635) ORDER BY t.name ASC

خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (2635) ORDER BY t.name ASC

class="post-2635 post type-post status-publish format-standard has-post-thumbnail hentry">
۶
  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_format') AND tr.object_id IN (2117) ORDER BY t.name ASC

  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (2117) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (2117) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (2117) ORDER BY t.name ASC

    class="post-2117 post type-post status-publish format-standard has-post-thumbnail hentry">
    regex ۴
  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_format') AND tr.object_id IN (261) ORDER BY t.name ASC

  • خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (261) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('post_tag') AND tr.object_id IN (261) ORDER BY t.name ASC

    خطای پایگاه‌داده وردپرس: [Got error 28 from storage engine]
    SELECT t.*, tt.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('hashtags') AND tr.object_id IN (261) ORDER BY t.name ASC

    class="post-261 post type-post status-publish format-standard has-post-thumbnail hentry">
    ۰

    پاسخ دهید

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *