it-swarm.asia

اقتراحات لـ settings.php - مطور محلي ، خادم تطوير ، خادم مباشر

بشكل أساسي ، أحد أعظم الأسئلة في كل العصور: ما هي بعض الطرق التي تستخدم بها settings.php في سير العمل الخاص بالتطوير/التدريج؟

الآن ، لقد قمت بإعداد ملف settings.php الخاص بي كما يلي ، وأبني تطوري على توجيه $ Host الخاص بالخادم - مما يعني أنه يمكنني العمل على dev.example.com لخادم التطوير (المشترك) local.example. com للكمبيوتر المحلي الخاص بي (وعمليات السحب من الكود المحلي الخاص بشركة dev) ، و www.example.com (أو فقط example.com) للموقع المباشر.

(هذا الكود موجود في قسم "إعدادات قاعدة البيانات" في settings.php):

$Host = $_SERVER['HTTP_Host'];
$base_url = 'http://'.$Host;
$cookie_domain = $Host;

switch($Host) {
  case 'example.com': # Production server
    $db_url = 'mysqli://prod_sql_user:[email protected]/prod_db';
    $update_free_access = FALSE;
    $conf = array (
      // Set production config options here...
      'example_setting' => 0,
    );
    break;

  case 'dev.example.com': # Development server
    $db_url = 'mysqli://dev_sql_user:[email protected]/dev_db';
    $update_free_access = FALSE;
    $conf = array (
      // Set production config options here...
      'example_setting' => 0,
    );
    break;

  case 'local.example.com': # Local server
    $db_url = 'mysqli://local_sql_user:[email protected]/local_db';
    $update_free_access = FALSE;
    $conf = array (
      // Set production config options here...
      'example_setting' => 0,
      // Turn off most core caching.
      'cache_inc' => 'includes/cache.inc',
      'cache' => CACHE_DISABLED,
    );
    break;

}
?>

يعمل هذا بشكل جيد لمعظم الأغراض ، ولكن هذا يعني أن لدينا الكثير من التعليمات البرمجية الغريبة الموجودة في ملف settings.php المشترك ... هل هناك طريقة أفضل؟

80
geerlingguy

ما أفعله هو فصل هذا الملف إلى settings.php و local.settings.php.

في نهاية Settings.php هو الكود التالي:

if (file_exists(dirname(__FILE__) . '/local.settings.php')) {
  include dirname(__FILE__) . '/local.settings.php';
}

ثم يتم استبعاد الملف المحلي من VCS الذي تستخدمه. وتتمثل الميزة في أنه يمكنك وضع الإعدادات الشائعة في جميع الحالات في settings.php وجعلها يتم توزيعها/توزيعها تلقائيًا والاحتفاظ بالأشياء المحلية في local.settings.php.

66
Berdir

يبدو هذا وكأنك تعيد اختراع وظائف Drupal المدمجة في مواقع متعددة.

أنا شخصياً أحتفظ بجميع المواضيع والوحدات القياسية للموقع في sites/all ، ثم يكون لديك sites/dev.example.com و sites/example.com.

كمكافأة إضافية ، يمكن أن يكون لديك مجلدات files مختلفة لكل موقع ، ويمكنك إضافة أي وحدات تطوير إلى sites/dev.example.com/modules كذلك.

25
Paul Jones

أفضل تجاهل الملف محليًا (باستخدام .gitignore الملف في git) ثم احتفظ بنسخ منفصلة إذا كان الملف على كل مضيف.

10
ack

أميل دائمًا إلى إعداد واستخدام إدخالات ملف DNS أو Host

dev.example.com
staging.example.com

و

example.com

ثم لدي أدلة ملف إعدادات منفصلة تماما مع أدلة الملفات المختلفة. على سبيل المثال ./sites/dev.example.com/files

6
Stewart Robinson

لماذا لا يكون لديك بعض المجلدات بناءً على اسم المضيف التطوير؟

مثال

  • مواقع/dev1.domain.com
  • مواقع/dev2.domain.com
  • مواقع/dev3.domain.com
  • مواقع/www.domain.com

لكل منها ملف الإعدادات الخاصة بهم و db_url.

5
Kevin

إذا كانت الأشياء الوحيدة التي تتغير هي بيانات اعتماد قاعدة البيانات ، فيمكنك تعيين متغيرات البيئة في تكوين المضيف الظاهري المحلي (والتدريج/الإنتاج) أو في مجلد .htaccess فوق جذر الويب الخاص بك. إليك مثال بسيط:

/var/www/example.com/drupal-resides-here

يمكنني بعد ذلك إنشاء ملف htaccess هنا:

/var/www/example.com/.htaccess

الذي يحتوي على الكود التالي:

SetEnv DB1_USER my_local_user
SetEnv DB1_PASS my_local_pass
SetEnv DB1_Host my_local_Host
SetEnv DB1_NAME my_local_dbname

ثم في /var/www/example.com/drupal-resides-here/sites/default/settings.php (أو أيا كان) يمكنك الحصول على بيانات اعتماد db مثل:

$db_url = "mysql://{$_SERVER['DB1_USER']}:{$_SERVER['DB1_PASS']}@{$_SERVER['DB1_Host']}:{$_SERVER['DB1_PORT']}/{$_SERVER['DB1_NAME']}";

يتيح هذا للعديد من المطورين تشغيل الأشياء محليًا ويمكنك الضغط على التجهيز/الإنتاج مع الاستمرار في تتبع الإعدادات. php (هناك أشياء أكثر من بيانات اعتماد قاعدة البيانات فقط ...). لن تضطر أيضًا إلى تتبع ملفات settings.php المتعددة.

2
Charlie Schliesser

الحل الأبسط والأكثر فعالية الذي هو مجرد سطر واحد هو ما يلي. ما عليك سوى تضمينه في السطر الأخير من ملف settings.php الخاص بك:

@include('settings.local.php');

يعني الرمز @ في المقدمة فقط عدم عرض أي خطأ حتى لو لم يجد هذا الملف. يتضمن الإعداد النموذجي مثل هذا شرطيًا للتحقق مما إذا كان الملف موجودًا. هذا ينجزها في سطر واحد بدونها.

http://php.net/manual/en/language.operators.errorcontrol.php

يُعرف أيضًا باسم عامل التشغيل STFU PHP عامل التشغيل .

0
Patoshi パトシ